2017-03-02 54 views
0

這裏移植ListView是我的代碼,當我使用Android Studio中,從內部類

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

這將很好地工作在我的onCreate方法,但問題是我不能我們「這」在anonynmous類。用getApplicationContext()替換'this'由於某種原因不起作用,無論是在onCreate內部還是外部。

這樣

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

誰能幫我找到我尋覓了很多問題,但不能找到這個答案的任何地方

感謝

回答

0

我假設你的匿名類是您的MainActivity內。如果是這樣的話,你可以簡單地做:

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

當你用「這個」您的匿名內部類,它指的是匿名內部類的實例,而不是外部類的實例。

+0

曾爲完美謝謝 –

1

我會通過這個指針通過內部類的構造函數中的參數並將其保存在內部類字段中,如下所示 - >

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

當你使用一個適配器來添加一些東西到一個列表或數組,您需要提醒的列表,在這種情況下數組,即有一個變化。你調用add函數後,你需要調用adapter.notifyDataSetChanged()

此外,聲明適配器時,聲明它的onCreate(外),然後指定你的價值觀裏面的onCreate()

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

請看下圖:

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

然後,您可以撥打:

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

然後如果需要的話,你也有機會獲得: listItems.clear();adapter.clear();

希望這有助於!