【问题标题】:ListView items overwriting the existing itemsListView 项目覆盖现有项目
【发布时间】:2015-01-31 17:44:46
【问题描述】:

这就是我尝试将项目添加到 listView 的方式。但不幸的是,它删除了旧项目并添加了新项目,而不是附加到旧项目。

     // get prompts.xml view
    LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this);
    View promptView = layoutInflater.inflate(R.layout.input_dialog, null);
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            MainActivity.this);
    alertDialogBuilder.setView(promptView);
    final EditText editText = (EditText) promptView
            .findViewById(R.id.list_text);
    ListView lv=(ListView)findViewById(R.id.itemslistView);
    final List<String> MyList = new ArrayList<String>();

    final ArrayAdapter<String> adp = new ArrayAdapter<String>(MainActivity.this,
            R.layout.list, MyList);
    lv.setAdapter(adp);
    // setup a dialog window
    alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    String NewListname = editText.getText().toString();
                    MyList.add(NewListname);
                    Toast.makeText(MainActivity.this, NewListname,
                            Toast.LENGTH_LONG).show();
                    adp.notifyDataSetChanged();

                }
            })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });

    // create an alert dialog
    AlertDialog alert = alertDialogBuilder.create();
    alert.show();

谁能告诉我如何添加它们?

【问题讨论】:

  • 你在调试模式下OK的onclick中查看MyList的数据了吗?它是否也包含旧数据?
  • @MysticMagic-不,旧数据不存在。
  • 如果 new ArrayList&lt;String&gt;(); 已经定义,则不要使用它。只需向其中添加项目并调用 adp.notifyDataSetChanged();

标签: android listview overwrite


【解决方案1】:

ArrayAdapter 具有 add(T obj) 方法。只需拨打电话

adp.add(NewListname);

【讨论】:

    【解决方案2】:

    问题是:

    您的 ArrayList 数据由于其内部初始化而被覆盖:

    final List<String> MyList = new ArrayList<String>();
    

    使其成为全局变量。只需在里面添加数据

    MyList.add(NewListname);
    

    或者只是将项目添加到适配器。

    adp.add(NewListname);
    Toast.makeText(MainActivity.this, NewListname,
                                Toast.LENGTH_LONG).show();
    adp.notifyDataSetChanged();
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      使用以下代码:

       MyList.add(NewListname);
       Toast.makeText(MainActivity.this, NewListname,
                              Toast.LENGTH_LONG).show();
       adp = new ArrayAdapter<String>(MainActivity.this,
              R.layout.list, MyList);
       adp.notifyDataSetChanged();
      

      而不是:

        MyList.add(NewListname);
        Toast.makeText(MainActivity.this, NewListname,
                              Toast.LENGTH_LONG).show();
        adp.notifyDataSetChanged();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 2020-03-27
        • 2017-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多