2017-03-02 2 views
0

Hier ist mein Code, wenn ichAndroid Studio, Listview bevöl von Innerclass

List<String> array = new ArrayList<String>(); 

array.add("kk"); 
array.add("bb"); 

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array); 

listView1.setAdapter(adapter); 

Das wird in meinem onCreate Verfahren gut funktionieren, aber das Problem ist, ich kann nicht mit uns ‚this‘ in einer anonynmous Klasse . das Ersetzen von 'this' mit getApplicationContext() funktioniert aus irgendeinem Grund nicht innerhalb oder außerhalb von onCreate.

wie diese

ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(),android.R.layout.simple_list_item_1,array); 

Kann mir jemand helfen, das Problem finde ich viel gesucht, aber keine Antwort auf diese überall

Dank

Antwort

0

Ich nehme an, Ihre anonyme Klasse befindet sich in Ihrer MainActivity. Wenn dies der Fall ist, können Sie einfach tun:

ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array); 

Wenn Sie „die“ in Ihrer anonymen Klasse zu verwenden, um es in die anonymen inneren Klasse Instanz bezieht und nicht die Instanz der äußeren Klasse.

+0

Arbeitete perfekt danke –

1

Ich würde passieren den this-Zeiger finden über Parameter im Konstruktor der inneren Klasse und speichern Sie es in einem inneren Klassenfeld, so ->

public class outerclass{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
    //.. other stuff 
    innerclass ic = new innerclass(this); 
    //.. other stuff 
    } 

    public class innerclass{ 
     private Context c; 
     public innerclass(Context c){ 
      this.c = c; 
     } 
    } 
} 
1

Wenn Sie einen Adapter verwenden, um etwas zu einer Liste oder einem Array hinzuzufügen, müssen Sie die Liste, in diesem Fall Array, darauf hinweisen, dass eine Änderung aufgetreten ist. Nachdem Sie das Add-Funktion aufrufen, müssen Sie adapter.notifyDataSetChanged()

auch anrufen, wenn der Adapter erklären, erklären sie außerhalb von onCreate() dann Ihre Werte innerhalb onCreate zuweisen()

adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listItems);

Siehe unten:

public class MainActivity extends AppCompatActivity { 

    // List of array strings that will represent list items 
    public static ArrayList<String> listItems = new ArrayList<String>(); 

    // Array string will handle the information stored in the listview 
    public static ArrayAdapter<String> adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     lView = (ListView) findViewById(R.id.list); 

     adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       listItems); 
     lView.setAdapter(adapter); 
    } 
} 

Dann können Sie anrufen:

listItems.add(<value>); 
adapter.notifyDataSetChanged(); 

dann wenn nötig haben Sie auch Zugriff auf: listItems.clear(); und adapter.clear();

hoffe, das hilft!

Verwandte Themen