Listview替换第一个项目,而不是创建新项目 [英] Listview replaces first item instead of creating new items

查看:75
本文介绍了Listview替换第一个项目,而不是创建新项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用FragmentsString个项目添加到我的ListView中.

I am trying to add String items to my ListView using Fragments.

我有四个Buttons.每次单击Button时,ListView应添加一个String项:单击按钮1,2、3或4"

I have four Buttons. Each time a Button is clicked, the ListView should add a String item: "Button 1,2,3, or 4 clicked"

问题是它一直用单击的Button String替换第一个String项.它不会创建新项目.

The problem is that it keeps replacing the first String item with the clicked Button String. It does not create new items.

这是我的代码:

ListViewFragment.java:

ListViewFragment.java:

public class ListViewFragment1 extends Fragment {

    protected ArrayAdapter<String> adapter1;

    @Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {       
        return inflater.inflate(R.layout.list_view_fragment1, container, false);
    }

    public void changeText(String data){

        //Build Adapter
        adapter1 = new ArrayAdapter<String>(getActivity(), R.layout.items);

        //Configure the list view
        ListView list1 = (ListView) getActivity().findViewById(R.id.listview1);

        list1.setAdapter(adapter1);

        adapter1.add(data);
        adapter1.notifyDataSetChanged();
    }
}

ButtonLayoutFragment.java:

ButtonLayoutFragment.java:

public class ButtonLayoutFragment extends Fragment implements View.OnClickListener {

    Communicator comm;

    @Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)     {   

        return inflater.inflate(R.layout.buttons_layout, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        comm = (Communicator) getActivity();

        Button[] bttn_arr = new Button[] {b0, b1, b2, b3}; 

        button_list.addAll(Arrays.asList(bttn_arr));

        button_list.set(0,(Button) getActivity().findViewById(R.id.button0));
        button_list.set(1,(Button) getActivity().findViewById(R.id.button1));
        button_list.set(2,(Button) getActivity().findViewById(R.id.button2));
        button_list.set(3,(Button) getActivity().findViewById(R.id.button3));

        for(Button b:button_list){
            b.setOnClickListener(this);
        }
    }

    @Override
    public void onClick(View v) {
          switch(v.getId()){
              case R.id.button0:
                  comm.respond("item0 added");
                  break;
              case R.id.button1:
                  comm.respond("item1 added");
                  break;
              case R.id.button2:
                  comm.respond("item2 added"); 
                break;
              case R.id.button3:
                  comm.respond("item3 added"); 
                break;
      }     
    }
}

MainActivity.java:

MainActivity.java:

public class MainActivity extends Activity implements Communicator {

    FragmentManager manager;

    ListViewFragment1 frag2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game_activity);

        ButtonLayoutFragment frag = new ButtonLayoutFragment();
        frag2 = new ListViewFragment1();
        ListViewFragment2 frag3 = new ListViewFragment2();
        manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.FragmentLayout, frag, "Fragment");
        transaction.add(R.id.fragment2, frag2, "Fragment2");
        transaction.commit();
    }

    @Override
    public void respond(String data) {
        frag2.changeText(data);
    }

}

Communicator.java:

Communicator.java:

public interface Communicator {
    public void respond(String data);    
}

这是所有相关的代码.我想我正确连接了片段.我认为的问题是ListViewFragment1-我可能没有正确使用adapter.我尝试了许多不同的方法,但是没有任何效果.有人可以帮忙吗?

This is all the relevant code. I think I connected the fragments correctly. The problem I assume is with ListViewFragment1 - I probably did not use the adapter correctly. I tried many different ways but nothing has been working. Can someone please help?

*提醒-每次单击Button时,我只希望ListView创建一个新项目.目前,它仅替换第一项.

*Reminder - I simply want the ListView to create a new item each time a Button is clicked. Currently it only replaces the first item.

推荐答案

每次调用changeText()时,适配器都会重置,因此只会显示一项.

Everytime you call changeText() your adapter is reset so only one item will be displayed

像这样更改片段

public class ListViewFragment1 extends Fragment {

protected ArrayAdapter<String> adapter1;
ListView list1;

@Override
public View onCreateView(LayoutInflater inflater,
        @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.list_view_fragment1, container, false);       
    adapter1 = new ArrayAdapter<String>(getActivity(), R.layout.items);
    list1 = (ListView) view.findViewById(R.id.listview1);
    list1.setAdapter(adapter1);
    return view;
}

public void changeText(String data){
    adapter1.add(data);
    adapter1.notifyDataSetChanged();
}
}

这篇关于Listview替换第一个项目,而不是创建新项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆