我需要创建用于单击复选框的事件,但它仅对第一个屏幕生效。我的代码:
如果有人帮助我,我会很高兴。
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;
}
}
代码一切正常吗?我必须在代码中进行哪些更改才能实现我正在寻找的任务。
答案 0 :(得分:0)
在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();
}
}
});
}
}