问题
I am trying to add String
items to my ListView
using Fragments
.
I have four Buttons
. Each time a Button
is clicked, the ListView
should add a String
item: "Button 1,2,3, or 4 clicked"
The problem is that it keeps replacing the first String
item with the clicked Button
String
. It does not create new items.
Here is my code:
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:
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:
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:
public interface Communicator {
public void respond(String data);
}
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?
*Reminder - I simply want the ListView
to create a new item each time a Button
is clicked. Currently it only replaces the first item.
回答1:
Everytime you call changeText()
your adapter is reset so only one item will be displayed
Change your fragment like this
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();
}
}
来源:https://stackoverflow.com/questions/28205853/listview-replaces-first-item-instead-of-creating-new-items