Android 在SimpleCursorAdapter上实现额外和设置数据到OnClickListener

Android 在SimpleCursorAdapter上实现额外和设置数据到OnClickListener,android,Android,我的ListView有一个SimpleCursorAdapter,该视图是从NewView设置的我试图使每次单击该行时,都会导致一个新活动,该活动将该行的属性添加到新活动中。 通常我使用OnItemClickListener来实现这一点,但由于我使用的是SimpleCorsOrAdapter和NewView,所以我唯一可以使行可单击的选项是使用OnClickListener 但是我很难实现以前在OnItemClickListener到OnClickListener上使用的方法。尤其是我不知道如何

我的ListView有一个SimpleCursorAdapter,该视图是从NewView设置的我试图使每次单击该行时,都会导致一个新活动,该活动将该行的属性添加到新活动中。

通常我使用OnItemClickListener来实现这一点,但由于我使用的是SimpleCorsOrAdapter和NewView,所以我唯一可以使行可单击的选项是使用OnClickListener

但是我很难实现以前在OnItemClickListener到OnClickListener上使用的方法。尤其是我不知道如何处理OnCLick上的“id”和“position”

这是我以前的听众:

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);
}