Android:当我在点击微调项目时动态添加新的ListView条目时,Spinners会放宽它们的值吗?

时间:2013-05-14 14:04:16

标签: android android-listview

我正在开发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);

        }
    }
}

提前致谢

1 个答案:

答案 0 :(得分:2)

这是因为您在向Spinner添加新行时,使用新值将新适配器分配给Spinner。 Spinner丢失了前一行以及之前的数据,并获得了另一个带有新数据行的Adapter。您需要将这些值附加到现有数据持有者(可能是数组或ArrayList),然后调用adapter.notifyDataSetChanged();

在下载数据时,需要将ArrayList移动​​到类级别(即使其成为类字段)。只需将新数据附加到list并调用adapter.notifyDataSetChanged();

即可