Android 单击行事件,该行中有复选框作为子元素

Android 单击行事件,该行中有复选框作为子元素,android,listview,Android,Listview,我可以保证,我已经搜索并尝试了一些代码片段来解决我的问题,但似乎没有一个能够按照我的要求工作。 我有一个带有组件的列表视图,自定义行“膨胀”到列表视图父视图中。2个文本视图和一个复选框。复选框确实会做出适当的反应,但我需要显示一个祝酒词(现在制作很简单),并选中该行的复选框 以下是我的onCreate方法: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s

我可以保证,我已经搜索并尝试了一些代码片段来解决我的问题,但似乎没有一个能够按照我的要求工作。 我有一个带有组件的列表视图,自定义行“膨胀”到列表视图父视图中。2个文本视图和一个复选框。复选框确实会做出适当的反应,但我需要显示一个祝酒词(现在制作很简单),并选中该行的复选框

以下是我的onCreate方法:

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,但不能是适配器。