Мне нужно создать события для установки флажка, но это действует только для первого экрана. Мой код:
Был бы очень рад, если бы мне кто-нибудь помог.
public class ListaFragment extends ListFragment{
public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//ListView lv = getListView(); // here it is available
final View rootView = inflater.inflate(R.layout.fragment_lista, container, false);
ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();
SongsManager plm = new SongsManager();
// get all songs from sdcard
Button exe = (Button) rootView.findViewById(R.id.Execultar);
exe.setOnClickListener(new OnClickListener() {
public ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
@Override
public void onClick(View v) {
SongsManager novo = new SongsManager();
this.list = novo.getPlayList();
CheckBox android = (CheckBox) rootView.findViewById(R.id.checkBox1);
android.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.isClickable()){
Toast.makeText(getActivity(), "Cliquei", Toast.LENGTH_LONG).show();
}
}
});
//ArrayList<HashMap<String, String>> lista = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < list.size(); i++) {
//CheckBox android = (CheckBox) rootView.findViewById(R.id.checkBox1);
//CheckBox ck = (CheckBox) v;
Toast.makeText(getActivity(), "Cliquei "+i+'-'+android.isChecked()+'-'+list.size(), Toast.LENGTH_LONG).show();
}
}
});
this.songsList = plm.getPlayList();
// looping through playlist
for (int i = 0; i < songsList.size(); i++) {
// creating new HashMap
HashMap<String, String> song = songsList.get(i);
// adding HashList to ArrayList
songsListData.add(song);
}
ListAdapter adapter = new SimpleAdapter(this.getActivity(), songsListData,
R.layout.fragment_item, new String[] { "songTitle" }, new int[] {
R.id.songTitle });
setListAdapter(adapter);
return rootView;
}
}
С кодом все в порядке? Какие изменения мне нужно внести в код, чтобы выполнить задачу, которую я ищу?
1 ответ
В onCreateView
вы устанавливаете прослушиватель кликов для первого флажка в списке. На данный момент нет способа узнать, сколько элементов будет в вашем списке или перебрать их, поэтому вы захотите удалить эту часть своего кода. Могу предложить два возможных решения.
Первый вариант намного проще, но с одним существенным недостатком. Вы не сможете определить, установили ли они флажок или название песни. Если для вас это не проблема, это самое простое решение. Прикрепите OnItemClickListener
к вашему списку. Он сообщит вам, какая строка в списке была нажата.
// get our list
ListView listView = rootView.findViewById(R.id.list);
// set the click listener on the whole list
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (view.isClickable()){
Toast.makeText(getActivity(), "Cliquei row # " + position, Toast.LENGTH_LONG).show();
}
}
});
Если вам нужно знать, что они устанавливают именно этот флажок, вам придется проделать небольшую дополнительную работу. Вместо использования SimpleAdapter
вы захотите создать свой собственный класс адаптера, расширяющий SimpleAdapter
. Внутри вашего нового класса адаптера вы переопределите getView(int position, View convertView, ViewGroup parent)
. Этот метод будет использоваться для создания каждого представления в вашем списке. По мере создания представления списка вы прикрепите OnCheckedChangeListener
к флажку в этом конкретном представлении. Примерно так ...
public class MyListAdapter extends SimpleListAdapter() {
@Override
public view getView(int position, View convertView, ViewGroup parent) {
// let the superclass inflate our view for us
View view = super.getView(position, convertView, parent);
// attach a listener to our check box
CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox1);
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Toast.makeText(getActivity(), "row # " + position + " is checked", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), "row # " + position + " is unchecked", Toast.LENGTH_LONG).show();
}
}
});
}
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
exe
. Это намеренно?