所以我在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,它不会更新微调器。
答案 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的方法。