Java 如何在android中选择和创建动态事件click listfragment
我需要为单击复选框创建事件,但它只对第一个屏幕生效。我的代码: 如果有人扶我起来,我会很高兴的Java 如何在android中选择和创建动态事件click listfragment,java,android,dynamic,tabs,android-listfragment,Java,Android,Dynamic,Tabs,Android Listfragment,我需要为单击复选框创建事件,但它只对第一个屏幕生效。我的代码: 如果有人扶我起来,我会很高兴的 public class ListaFragment extends ListFragment{ public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); public View onCreateV
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;
}
}
代码一切正常吗?为了完成我要寻找的任务,我必须对代码进行哪些更改。在onCreateView中,您正在列表中的第一个复选框上设置一个单击侦听器。此时,无法知道列表中有多少项,也无法遍历它们,因此您需要删除代码的这一部分。我可以提出两种可能的解决办法
第一种方法简单得多,但有一个主要缺点。您将无法判断他们是否单击了复选框或歌曲标题。如果这不是你的问题,这是最简单的解决方案。将侦听器附加到listview。它将告诉您单击了列表中的哪一行
// 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();
}
}
});
在用户单击exe按钮之前,您不会在复选框上设置“单击侦听器”。这是故意的吗?实际上,我的意图是,每一行的事件点击ListVIEW,ListVIEW从SD的熊,我做的方式只影响列表的第一行,不知道我是否可以清楚……不仅要考虑当你点击按钮…对不起,我不明白你的问题。列表中的每个视图都包含一个复选框还是几个复选框?几个,如下所示,复选框列表。第1项-未检查项2-检查项3-未检查项4-未检查如果我为第二项评分,则不会发生任何情况。只有在我单击primero时才会发生。它仅适用于单击屏幕上的第一项。这张单子是零碎的,很抱歉我的英语不好,谢谢你的耐心
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();
}
}
});
}
}