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 ;-)