Android 在SimpleCursorAdapter上实现额外和设置数据到OnClickListener
我的ListView有一个SimpleCursorAdapter,该视图是从NewView设置的我试图使每次单击该行时,都会导致一个新活动,该活动将该行的属性添加到新活动中。 通常我使用OnItemClickListener来实现这一点,但由于我使用的是SimpleCorsOrAdapter和NewView,所以我唯一可以使行可单击的选项是使用OnClickListener 但是我很难实现以前在OnItemClickListener到OnClickListener上使用的方法。尤其是我不知道如何处理OnCLick上的“id”和“position” 这是我以前的听众:Android 在SimpleCursorAdapter上实现额外和设置数据到OnClickListener,android,Android,我的ListView有一个SimpleCursorAdapter,该视图是从NewView设置的我试图使每次单击该行时,都会导致一个新活动,该活动将该行的属性添加到新活动中。 通常我使用OnItemClickListener来实现这一点,但由于我使用的是SimpleCorsOrAdapter和NewView,所以我唯一可以使行可单击的选项是使用OnClickListener 但是我很难实现以前在OnItemClickListener到OnClickListener上使用的方法。尤其是我不知道如何
protected void onItemClick(AdapterView<?> l, View v, int position, long id) {
Intent listIntent = new Intent(ProjectsList.this, DetailsActivity.class);
listIntent.putExtra("spendino.de.ProjectDetail.position",position);
listIntent.setData(Uri.withAppendedPath(Uri.withAppendedPath(
Provider.CONTENT_URI, Database.Project.NAME), Long
.toString(id)));
startActivity(listIntent);}
这一行告诉我们,每次单击该行时,它都必须转到一个包含其属性的新活动:
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
}
});
我是这方面的新手,我真的需要一个解决方案来解决我面临的困难您可以使用视图的和方法为视图指定自定义值。您可以将它们用于“id”和“position”-在newView()方法中分配它们,并在onClick方法中取出它们。我不知道在使用SimpleCorsorAdapter的ListView上使用onItemClickListener有任何问题 就ListView而言,newView有效地执行了与另一个适配器的getView相同的操作—它们都提供了用作列表中的行的视图,并且ListView提供了独立于适配器的onItemClickListener接口 但是,手动将视图设置为可单击可能会截获用于onItemClick的触摸事件,因此请尝试使用旧的onItemClick侦听器,不要调用
convertView.setClickable(true);
更新:
将newView方法中的行更改为:
convertView.setOnClickListener(new ClickListener(context, cursor.getString(mProjectNameIndex), convertView.getId()));
使用该类的:
class ClickListener implements OnClickListener {
Intent listIntent;
public ClickListener(Context c, String name, long id) {
listIntent = new Intent(c, DetailsActivity.class);
listIntent.putExtra("spendino.de.ProjectDetail.name", name);
listIntent.setData(Uri.withAppendedPath(Uri.withAppendedPath(
Provider.CONTENT_URI, Database.Project.NAME), Long
.toString(id)));
}
public void onClick(View v) {
v.getContext().startActivity(listIntent);
}
}
还要覆盖适配器中的bindView(这是因为在newView中创建的视图可以重用)
谢谢你能提供代码让我更清楚吗?我还是个新手,我必须声明因为我放大了视图,因为我每行都有一个按钮。列表行和按钮都必须可单击。我试着调用:convertView.setOnItemClickListener(this);我明白了,这没有帮助,因为NewViewAh类型的mclickListener方法是未定义的。视图中的按钮确实会有所改变。将更新我的回答另外,您必须更改您的DetailActivity以获取名称而不是位置(或光标行的唯一ID)。因此,您建议我创建一个新类,即ClickListener?我已经这样做了,但是我在这里收到了一个错误:startActivity(listIntent);抱歉,更新的答案-应该是v.getContext().startActivity(listIntent);
class ClickListener implements OnClickListener {
Intent listIntent;
public ClickListener(Context c, String name, long id) {
listIntent = new Intent(c, DetailsActivity.class);
listIntent.putExtra("spendino.de.ProjectDetail.name", name);
listIntent.setData(Uri.withAppendedPath(Uri.withAppendedPath(
Provider.CONTENT_URI, Database.Project.NAME), Long
.toString(id)));
}
public void onClick(View v) {
v.getContext().startActivity(listIntent);
}
}
@Override
public void bindView (View view, Context context, Cursor cursor) {
if(view != null) {
view.setOnClickListener(new ClickListener(context, cursor.getString(mProjectNameIndex), view.getId()));
}
super.bindView(view, context, cursor);
}