列表视图项目的问题

时间:2018-01-17 14:40:46

标签: java android listview

我不知道为什么但是当我向listview添加项目时,我只得到最后一项。例如。如果我写苹果而不是梨我只得到梨而不是苹果和梨。 为什么呢?

enter image description here

CODE:

 holder.button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                System.out.println("IDDD:"+iddd);
                System.out.println("IDDD:"+video2.getPic());

                //holder.lw.setA

                String commento= (holder.tw.getText().toString());
               // holder.lw.setAdapter(adapter);
                 ArrayList<String> arrayList= new ArrayList<String>();
                final ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, arrayList);
                arrayList.add(commento);
                // next thing you have to do is check if your adapter has changed
                holder.lw.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                System.out.println("LISTVIEW:"+arrayList);


            }

        });

5 个答案:

答案 0 :(得分:1)

您在每次点击期间都在创建新的列表和适配器,因此请在该功能之外移动声明和初始化

  • getView之外声明它们(如果是Base或ArrayAdaoter)或createViewHolder(RecyclerAdapter)
  • constructor
  • 中初始化它们
  • 将数据添加到列表并通知适配器

答案 1 :(得分:1)

在每次点击中,您都会对新列表ArrayList<String> arrayList= new ArrayList<String>();进行十分转换,并且它是错误的

你需要将它从侦听器中分离出来并在你的监听器中添加新项并使用adapter.notifyDataSetChanged();

答案 2 :(得分:0)

在这里使用视图持有者模式更好地使用listview的现有实例,而不是一直重新创建新实例。

答案 3 :(得分:0)

你不需要做任何特别的事情,在onClick中你需要获得对ArrayAdapter的引用并在其上调用方法add(T ...)。

holder.button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                System.out.println("IDDD:"+iddd);
                System.out.println("IDDD:"+video2.getPic());


                String commento= (holder.tw.getText().toString());
                ArrayAdapter adapter = (ArrayAdapter) holder.lw.getAdapter();
                adapter.add(commento);    
            }    
        });

甚至无需调用notifyDataSetChanged,因为add已在内部执行此操作。

答案 4 :(得分:-1)

如果你使用它,你可以解决你的问题

yourAdapter.(getCount()-1-position);  

如果您想查看前面的最后一项

,请执行此操作
  public yourPoJo getItem(int position) {
                return super.getItem(getCount()-1-position);
            }