Listview替换第一个项目,而不是创建新项目 [英] Listview replaces first item instead of creating new items
问题描述
我正在尝试使用Fragments
将String
个项目添加到我的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屋!