Android:当我在单击微调器项目时动态添加新的 ListView 条目时,微调器会丢失它们的值吗?

标签 android android-listview

我正在开发 Android 应用程序。在我有两个 Activity 的应用程序中,第一个 Activity 显示列表,第二个 Activity 在同一 Activity 中具有微调器和 ListView ,当用户从微调器中单击项目时,将显示 ListView 。当用户从第一个 Activity 导航到第二个 Activity 时,微调器会正确填充 ListView 。但问题是,在 ListView 正确显示后,微调项为空白。我不知道我哪里做错了。请任何人有解决方案。

这里我发布了一些第二个 Activity 的代码

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

        }
    }
}

提前致谢

最佳答案

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

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

关于Android:当我在单击微调器项目时动态添加新的 ListView 条目时,微调器会丢失它们的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545336/

相关文章:

java - 如何在Json中定义一个数据结构,结构的顶部是对象的名称?

android - 滑动 View 后,开始一个 Activity

java - `onCreate` 方法未被调用

android - 如何确定 ListView fling 何时变慢

Android subview 高度与 ListView 项目中的父项不匹配

android - 带有 customView 的 Actionbar 有额外的填充,无法删除

java - ANR 输入调度在 Android 4.4 上超时

android - 小部件中的ListView不更新

android - Listview 未填充且 getView 函数也未被调用

android - 按钮 ListView 适配器中的 showDialog