Android 获取多视图listItem中单击的视图和正确的数据-使用ListView、CursorAdapter
因此,我有一个用于listview的游标适配器。我希望每个列表项有4个可点击的视图,因为我会有不同的事情发生时,每件事是点击。。。这里不重要 我的问题…是我无法获取所选项目(或行)中的数据以及在该列表项目中单击的视图(1到4) 到目前为止我所尝试的:Android 获取多视图listItem中单击的视图和正确的数据-使用ListView、CursorAdapter,android,onclicklistener,android-cursoradapter,onitemclicklistener,Android,Onclicklistener,Android Cursoradapter,Onitemclicklistener,因此,我有一个用于listview的游标适配器。我希望每个列表项有4个可点击的视图,因为我会有不同的事情发生时,每件事是点击。。。这里不重要 我的问题…是我无法获取所选项目(或行)中的数据以及在该列表项目中单击的视图(1到4) 到目前为止我所尝试的: @Override public void bindView(View v, Context context, Cursor c) { ImageView imPlay = (ImageView) v.findViewById(R.id.
@Override
public void bindView(View v, Context context, Cursor c) {
ImageView imPlay = (ImageView) v.findViewById(R.id.row_play_button);
LinearLayout llFirstHalf = (LinearLayout) v.findViewById(R.id.row_first_half);
LinearLayout llSecondHalf = (LinearLayout) v.findViewById(R.id.row_second_half);
CheckBox cbCheck = (CheckBox) v.findViewById(R.id.row_checkbox);
}
public void myOnClick(View v) {
switch(v.getId()){
case R.id.row_checkbox:
//do something
break;
case R.id.row_first_half:
//do something
break;
case R.id.row_second_half:
//do something
break;
case R.id.row_play_button:
//do something
break;
@Override
public void onItemClick(AdapterView<?> parent, View view, int index, long pos) {
Log.e("onITEMCLICK", "index: "+String.valueOf(index));
Log.e("onITEMCLICK", "position: "+String.valueOf(pos));
LinearLayout listItem = (LinearLayout) view;
String title;
String date_created;
String comments;
String sample_rate;
String duration;
String file_size;
String id;
String file_url;
Cursor c = app.rec_adapter.getCursor();
c.moveToPosition(index);
title = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_TITLE));
date_created = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_DATE_CREATED));
comments = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_COMMENTS));
sample_rate = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_SAMPLE_RATE));
sample_rate = convertToHumanReadable(sample_rate);
duration = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_DURATION));
file_size = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_FILE_SIZE));
file_url = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_FILE_URL));
id = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_ROWID));
// find out what section was clicked on the item -- NO SOLUTION
ImageView imPlay = (ImageView) listItem.findViewById(R.id.row_play_button);
LinearLayout llFirstHalf = (LinearLayout) listItem.findViewById(R.id.row_first_half);
LinearLayout llSecondHalf = (LinearLayout) listItem.findViewById(R.id.row_second_half);
CheckBox cbCheck = (CheckBox) listItem.findViewById(R.id.row_checkbox);
}
@Override
public void bindView(View v, Context context, Cursor c) {
ImageView imPlay = (ImageView) v.findViewById(R.id.row_play_button);
LinearLayout llFirstHalf = (LinearLayout) v.findViewById(R.id.row_first_half);
LinearLayout llSecondHalf = (LinearLayout) v.findViewById(R.id.row_second_half);
CheckBox cbCheck = (CheckBox) v.findViewById(R.id.row_checkbox);
}
public void myOnClick(View v) {
switch(v.getId()){
case R.id.row_checkbox:
//do something
break;
case R.id.row_first_half:
//do something
break;
case R.id.row_second_half:
//do something
break;
case R.id.row_play_button:
//do something
break;
@Override
public void onItemClick(AdapterView<?> parent, View view, int index, long pos) {
Log.e("onITEMCLICK", "index: "+String.valueOf(index));
Log.e("onITEMCLICK", "position: "+String.valueOf(pos));
LinearLayout listItem = (LinearLayout) view;
String title;
String date_created;
String comments;
String sample_rate;
String duration;
String file_size;
String id;
String file_url;
Cursor c = app.rec_adapter.getCursor();
c.moveToPosition(index);
title = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_TITLE));
date_created = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_DATE_CREATED));
comments = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_COMMENTS));
sample_rate = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_SAMPLE_RATE));
sample_rate = convertToHumanReadable(sample_rate);
duration = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_DURATION));
file_size = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_FILE_SIZE));
file_url = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_FILE_URL));
id = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_ROWID));
// find out what section was clicked on the item -- NO SOLUTION
ImageView imPlay = (ImageView) listItem.findViewById(R.id.row_play_button);
LinearLayout llFirstHalf = (LinearLayout) listItem.findViewById(R.id.row_first_half);
LinearLayout llSecondHalf = (LinearLayout) listItem.findViewById(R.id.row_second_half);
CheckBox cbCheck = (CheckBox) listItem.findViewById(R.id.row_checkbox);
}
在MainActivity中实现onItemClick时:
@Override
public void bindView(View v, Context context, Cursor c) {
ImageView imPlay = (ImageView) v.findViewById(R.id.row_play_button);
LinearLayout llFirstHalf = (LinearLayout) v.findViewById(R.id.row_first_half);
LinearLayout llSecondHalf = (LinearLayout) v.findViewById(R.id.row_second_half);
CheckBox cbCheck = (CheckBox) v.findViewById(R.id.row_checkbox);
}
public void myOnClick(View v) {
switch(v.getId()){
case R.id.row_checkbox:
//do something
break;
case R.id.row_first_half:
//do something
break;
case R.id.row_second_half:
//do something
break;
case R.id.row_play_button:
//do something
break;
@Override
public void onItemClick(AdapterView<?> parent, View view, int index, long pos) {
Log.e("onITEMCLICK", "index: "+String.valueOf(index));
Log.e("onITEMCLICK", "position: "+String.valueOf(pos));
LinearLayout listItem = (LinearLayout) view;
String title;
String date_created;
String comments;
String sample_rate;
String duration;
String file_size;
String id;
String file_url;
Cursor c = app.rec_adapter.getCursor();
c.moveToPosition(index);
title = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_TITLE));
date_created = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_DATE_CREATED));
comments = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_COMMENTS));
sample_rate = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_SAMPLE_RATE));
sample_rate = convertToHumanReadable(sample_rate);
duration = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_DURATION));
file_size = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_FILE_SIZE));
file_url = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_FILE_URL));
id = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_ROWID));
// find out what section was clicked on the item -- NO SOLUTION
ImageView imPlay = (ImageView) listItem.findViewById(R.id.row_play_button);
LinearLayout llFirstHalf = (LinearLayout) listItem.findViewById(R.id.row_first_half);
LinearLayout llSecondHalf = (LinearLayout) listItem.findViewById(R.id.row_second_half);
CheckBox cbCheck = (CheckBox) listItem.findViewById(R.id.row_checkbox);
}
@覆盖
public void onItemClick(AdapterView父视图、视图视图、整数索引、长位置){
Log.e(“onITEMCLICK”,“index:+String.valueOf(index));
Log.e(“onITEMCLICK”,“position:”+String.valueOf(pos));
LinearLayout列表项=(LinearLayout)视图;
字符串标题;
创建的字符串日期;
字符串注释;
串采样率;
字符串持续时间;
字符串文件大小;
字符串id;
字符串文件的url;
游标c=app.rec_adapter.getCursor();
c、 移动位置(索引);
title=c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_title));
date_created=c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_date_created));
comments=c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_comments));
sample_rate=c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_sample_rate));
采样率=转换为可读(采样率);
duration=c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_duration));
file_size=c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_file_size));
file_url=c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_file_url));
id=c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_ROWID));
//找出在项目上单击的部分--无解决方案
ImageView imPlay=(ImageView)listItem.findViewById(R.id.row\u play\u按钮);
linerlayout lllastHalf=(linerlayout)listItem.FindView wByd(R.id.row_1;前半部分);
LinearLayout llSecondHalf=(LinearLayout)listItem.findViewById(R.id.row\u secondhalf);
复选框cbCheck=(复选框)listItem.findViewById(R.id.row\u复选框);
}
您有这个LinearLayout列表项=(LinearLayout)视图代码>因此您已经使用列表项
进行了初始化。我认为您需要从行项目中获取数据。您已经初始化了视图。那么,获取数据的问题是什么呢?请不要在问题标题前加上Android,底部的标签就足够了。由于您需要查看一行中四个视图上的单击事件,因此不能使用onItemClick()
,因为在单击整行时会触发该事件。相反,您应该为四个视图(在bindView()
中)设置onClick
侦听器,并将游标.getPosition()
值作为标记传递给它们。通过这种方式,您将知道在列表视图中单击此视图的行,以便您可以检索正确的数据。好的,谢谢您的提示。那么对于每个可点击的视图,我将把它的标签设置为当前光标位置?然后,当我想要获取行信息时,我必须执行“pos=view.getTag()”,将光标设置为pos,然后“cursor.getColumnIndexOrThrow()”来获取数据@卢克斯普罗贡问题。。。当我对光标位置执行getTag时,它始终只给我第一个项目的位置。我使用:View parent=v.getRootView()代码>View vId=(View)parent.findviewbyd(R.id.row\u id);int cursor_pos=(整数)vId.getTag()代码>光标mCursor=this.c;mCursor.moveToPosition(光标位置);'他解决了我自己的问题。而不是使用v.getRootView();我需要使用v.getParent()代码>我猜是getRootView();获取Listview布局,然后只获取第一个R.id.row_id视图,它始终是第一项。。。有道理