如何在另一个类的onCreate中更新适配器?

时间:2014-03-20 14:26:52

标签: java android android-asynctask android-arrayadapter

所以我在onCreate方法中有一个DataAdapter,我想从另一个类更新它。

main_spinList = (Spinner) findViewById(R.id.main_spinList);
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    main_spinList.setAdapter(dataAdapter);
    //=========================================Spinner==================
    main_spinList.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            filepath = String.valueOf(main_spinList.getSelectedItem());
        }
        public void onNothingSelected(AdapterView<?> arg0) {
            Log.e("klkl", "klkl");
        }
    }); 

我可以从AsyncTask更新这样的但是如何使用dataAdapter.notifyDataSetChanged()更新来自另一个类的适配器;吗

     new FtpGet(){
        public void onPostExecute(ArrayList<String> result) {
            list.clear();
             list.addAll(result);
             dataAdapter.notifyDataSetChanged();


     }

    }.execute();

另一个问题是API 9设备无法像上面那样在setOnSelectedItem方法中执行AsyncTask,它不会更新微调器。

2 个答案:

答案 0 :(得分:1)

我认为你最好看看"Getting a Result from an Activity""Retrieving result data from a sub-activity",因为在你回到它的活动之前你不需要刷新适配器。

onActivityResult()将允许您从子活动中获取状态,并且可以在返回时从同一活动刷新适配器。

在适配器活动中,将此代码放在启动其他活动的位置:

  Intent i = new Intent(this, ActivityTwo.class);
  startActivityForResult(i, REQUEST_CODE);

并添加此方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
    if (data.hasExtra("result")) {
      ArrayList<String> result = data.getExtras().getSerializableExtra("result");
      list.addAll(result);
         dataAdapter.notifyDataSetChanged();
    }
  }
} 

关闭子活动并想要刷新适配器时请使用:

  Intent data = new Intent();
  data.putExtra("result", result);
  setResult(RESULT_OK, data);
  finish();

答案 1 :(得分:0)

在您实现界面的活动中使用界面,而在您触发它的其他类中使用界面。以及它为适配器使用notify的方法。