Android 单击行事件,该行中有复选框作为子元素
我可以保证,我已经搜索并尝试了一些代码片段来解决我的问题,但似乎没有一个能够按照我的要求工作。 我有一个带有组件的列表视图,自定义行“膨胀”到列表视图父视图中。2个文本视图和一个复选框。复选框确实会做出适当的反应,但我需要显示一个祝酒词(现在制作很简单),并选中该行的复选框 以下是我的onCreate方法:Android 单击行事件,该行中有复选框作为子元素,android,listview,Android,Listview,我可以保证,我已经搜索并尝试了一些代码片段来解决我的问题,但似乎没有一个能够按照我的要求工作。 我有一个带有组件的列表视图,自定义行“膨胀”到列表视图父视图中。2个文本视图和一个复选框。复选框确实会做出适当的反应,但我需要显示一个祝酒词(现在制作很简单),并选中该行的复选框 以下是我的onCreate方法: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_song_selector);
//Create the model
songSelectorModel = new SongSelectorModel();
songSelectorModel.setCatalog(SongSelectorModel.getDummyCatalogData());
listViewSongCatalog = (ListView) findViewById(R.id.lvCatalog);
listViewSongCatalog.setAdapter(new CatalogListViewAdapter(songSelectorModel.getCatalog()));
Button btnViewPlayList = (Button) findViewById(R.id.btnViewPlayList);
btnViewPlayList.setOnClickListener(new ButtonViewPlayListOnClickHandler());
}
下面是来自自定义适配器的getView方法:
public View getView(int position, View convertView, ViewGroup parent) {
final ViewItem rowViewComponents;
if (convertView == null) {
convertView = SongSelectorActivity.this.getLayoutInflater().inflate(R.layout.song_list_item, null);
rowViewComponents = new ViewItem();
//TODO 02
//Set the components of rowViewComponent from the "song_list_item" layout
rowViewComponents.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox01);
rowViewComponents.textViewSongTitle = (TextView) convertView.findViewById(R.id.tvSongTitle);
rowViewComponents.textViewSongLength = (TextView) convertView.findViewById(R.id.tvSongLength);
listViewSongCatalog.setOnItemClickListener(new MyOnItemClickListener());
//Register the handlers for the buttons on the rowView
rowViewComponents.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int position;
View rowView;
if (isChecked) {
rowView = (View) buttonView;
position = listViewSongCatalog.getPositionForView(rowView);
Song selectedSong = songSelectorModel.getCatalog().get(position);
selectedSong.setSelected(true);
songSelectorModel.getPlayList().add(selectedSong);
} else {
rowView = (View) buttonView;
position = listViewSongCatalog.getPositionForView(rowView);
Song selectedSong = songSelectorModel.getCatalog().get(position);
selectedSong.setSelected(true);
songSelectorModel.getPlayList().remove(selectedSong);
}
}
});
convertView.setTag(rowViewComponents);
} else {
rowViewComponents = (ViewItem) convertView.getTag();
}
// Get the song at the selected position from the songCatalog and
Song songForThisRowPosition = songCatalog.get(position);
rowViewComponents.textViewSongTitle.setText(songForThisRowPosition.getTitle());
rowViewComponents.textViewSongLength.setText(songForThisRowPosition.getLength() + " secs");
return convertView;
}
最后是事件处理程序,非常基本,只是为了检查它是否工作而干杯,但同样,什么也没有发生
public class MyOnItemClickListener implements AdapterView.OnItemClickListener {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(SongSelectorActivity.this,"Clicked on a Row!",Toast.LENGTH_SHORT).show();
}
}
公共类MyOnItemClickListener实现AdapterView.OnItemClickListener{
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Toast.makeText(SongSelectorActivity.this,“点击一行!”,Toast.LENGTH\u SHORT.show();
}
}
我尝试过不同的片段,其中我必须设置listViewSongCatalgo.SetDegenantFocusability——这三种可能性都有,但都没有给我想要的效果。
在Stackoverflow以外的其他网站上提供了相同的答案,但仍然没有结果。
我希望您能就如何进行提供一些见解
亲切问候尝试添加此,listViewSongCatalog.setChoiceMode(ListView.CHOICE_MODE_SINGLE);,内部onCreate()。希望对你有所帮助!你也可以看看我的样品:对不起,那不管用。我还尝试了setOnItemClickListener和setOnItemSelectedListener。没有一个对我有用(setOnItemClickListener应该在活动中设置,可以是onCreate,但不能是适配器。