2016-08-17 1 views
0

Ich habe schon lange danach gesucht, aber nichts, was ich gefunden habe, war wirklich hilfreich ... Ich habe ein Layout mit einer customView, die beim Zeichnen gezeichnet wird Layout ist geladen. Also starte ich in meiner init() in der Aktivität eine TCP-Verbindung zu meinem Server, die eine ArrayList zurückgibt. Ich möchte, dass ArrayList throw übergeben an die onDraw(), wo ich mit seinen Werten arbeite. Mein Problem ist, dass ich eine Methode aufrufen kann, die eine lokale Variable auf den neuen Wert setzt, aber aus irgendeinem Grund verwendet die Methode onDraw() immer noch die leere ArrayList, die nicht gefüllt ist. Ich denke, dass der Code es besser erklärt ... Ist das der richtige Weg, oder ist mein Ansatz auf Anhieb falsch?Wie man Variablen an die Custum - Ansicht nach dem ersten onDraw() weitergibt

HistoryActivity:

public class HistoryActivity extends AppCompatActivity { 

private ListView history_List; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_history); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    initialize(); 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    finish(); 
    return true; 
} 

private void initialize(){ 
    history_List = (ListView) findViewById(R.id.history_List); 
    new TCP_Client(new TCP_Client.AsyncResponse() { 
     @Override 
     public void processFinish(String[] output) { 
      ArrayList<String[]> day_Averrage_History = new ArrayList<String[]>(); 
      for(String encoded_Array:output){ 
       day_Averrage_History.add(Encoder.unserialize(encoded_Array)); 
      } 
      Diagramm_Builder diagramm_builder = new Diagramm_Builder(HistoryActivity.this); 
      diagramm_builder.set_Drawing_Parameters(day_Averrage_History);//Here I pass the variable 
      diagramm_builder.invalidate(); 
     } 
    } 

    ).execute(new String[]{"r","dah","TecHFreaKAV"}); 
} 

} 

DiagrammBuilder:

public class Diagramm_Builder extends View { 

public Context ctx; 
private ArrayList<String[]> parameters; 

public Diagramm_Builder(Context context){ 
    super(context); 
} 

public Diagramm_Builder(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

public void set_Drawing_Parameters(ArrayList<String[]> given_Parameters){ 
    parameters = given_Parameters; 
} 

public Diagramm_Builder(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    ctx = this.getContext(); 
} 

public ArrayList<String[]> get_Drawing_Parameters(){ 
    try { 
     Log.e("Message", "Lenght = " + this.parameters.size()); 
    }catch(NullPointerException e){ 
     Log.e("Message","Lenght = 0"); 
    } 
    return parameters; 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    if(get_Drawing_Parameters() == null) { 
     Rect test_rect = new Rect(); 
     test_rect.set(1, 1, canvas.getWidth(), canvas.getHeight()); 
     Paint color = new Paint(); 
     color.setColor(Color.DKGRAY); 
     color.setStyle(Paint.Style.FILL); 
     canvas.drawRect(test_rect, color); 
    }else{ 
     Log.e("Message","Recived Array"); 
    } 

} 


} 

Die Consule gibt zwei mal E:/Nachricht: Länge = 0, was bedeutet, dass die Arraylist nicht ankommt ...

Ich wäre für jede Hilfe sehr dankbar ;-)

Antwort

0

Ich habe das Problem mit jus gelöst t Setzen Sie ein globales Varibale in meine HistoryActivity und rufen Sie setContentView() nach dem auf, was mir die Möglichkeit gab, onDraw() aufzurufen. HistoryActivity.ArrayList

Verwandte Themen