我正在开发Android应用程序。在我的应用程序中有两个活动,第一个活动是显示列表,第二个活动是在同一个活动中有微调器和列表视图,当用户从微调器点击项目时,将显示列表视图。当用户从第一个活动导航到第二个活动时,然后使用listview正确填充微调器。但问题是listview显示正确后旋转项目为空白。我不知道我在哪里做错了。请有人解决。
这里我发布了一些第二活动的代码
public class ProjectDetailActivity extends SherlockListActivity {
private List<String> list = new ArrayList<String>();
private ArrayList<HashMap<String, String>> list2 = new ArrayList<HashMap<String,String>>();
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_project_detail);
//get spinner item from server when user comes from first activity.
new LoadPhaseData().execute();
//Listener for Phase spinner
projSpinnerPhase.setOnItemSelectedListener((OnItemSelectedListener) new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
//get listview when user click item from spinner
new LoadPhaseData().execute();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
//this adapter for listview when click item from spinner
ListAdapter phaseAdapter = new SimpleAdapter(getApplicationContext(),
list2, R.layout.phase_avail_list_item,
new String[] {PHASE_NAME}, new int[]
{R.id.phaseName});
setListAdapter(phaseAdapter);
}
private class LoadPhaseData extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
//Here I am calling web service for spinner and listview
}
@Override
protected void onPostExecute(Void result) {
//following adapter for spinner item
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(
getApplicationContext(),android.R.layout.simple_spinner_item,list);
dataAdapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
projSpinnerPhase.setAdapter(dataAdapter);
}
}
}
提前致谢
答案 0 :(得分:2)
这是因为您在向Spinner
添加新行时,使用新值将新适配器分配给Spinner
。 Spinner丢失了前一行以及之前的数据,并获得了另一个带有新数据行的Adapter。您需要将这些值附加到现有数据持有者(可能是数组或ArrayList),然后调用adapter.notifyDataSetChanged();
在下载数据时,需要将ArrayList移动到类级别(即使其成为类字段)。只需将新数据附加到list
并调用adapter.notifyDataSetChanged();