基于mclick方法的android视图提取

基于mclick方法的android视图提取,android,listview,Android,Listview,我有一个列表视图,在这个列表视图的适配器中我有一个方法 public void onItemClick(AdapterView<?> AdapterView, View View, int position, long id) 更新:我只是在getView方法中调用onClick方法 setOnClickListener(new View.OnClickListener() { public void onClick(View v) {

我有一个列表视图,在这个列表视图的适配器中我有一个方法

public void onItemClick(AdapterView<?> AdapterView, View View, 
int position, long id) 
更新:我只是在getView方法中调用onClick方法

setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 Toast.makeText(context,position.toString(), Toast.LENGTH_LONG).show();
             }
         });
我的问题就解决了


感谢FunkTheMonk和Vikky。

根据您的xml文件,单击视图中的此处指的是相对视图,而不是文本视图

public void onItemClick(AdapterView<?> AdapterView, View View, int position, long id) {

         TextView name = View.findViewById ( R.id.name );
          for other views .......
}
public void onItemClick(AdapterView AdapterView,视图视图,int位置,长id){
TextView name=View.findviewbyd(R.id.name);
其他意见。。。。。。。
}

此处,根据xml文件,单击视图视图指的是相对视图,而不是文本视图

public void onItemClick(AdapterView<?> AdapterView, View View, int position, long id) {

         TextView name = View.findViewById ( R.id.name );
          for other views .......
}
public void onItemClick(AdapterView AdapterView,视图视图,int位置,长id){
TextView name=View.findviewbyd(R.id.name);
其他意见。。。。。。。
}

您可以在onItemClick中获得的视图上使用view.findViewById。这里它说()这是一个相对较长的操作,建议使用视图的标记来存储相关的子视图。这似乎是合乎逻辑的,但在您的情况下,这可能是过早的优化-这取决于您的视图的使用次数。

您可以在onItemClick中获得的视图上使用view.findViewById。这里它说()这是一个相对较长的操作,建议使用视图的标记来存储相关的子视图。这似乎合乎逻辑,但在您的情况下,这可能是过早的优化,具体取决于视图的使用次数。

您可以在ListView中使用的行内的视图上设置onClickListener

abstract class Clicker implements OnClickListener {
        int mPosition;
        public Clicker(int position) {
            mPosition = position;
        }
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            //inflate
        }

        //do your stuff
        convertView.findViewById(R.id.button1).setOnClickListener(new Clicker(position) {
            public void onClick(View v)
            {
                int row = mPosition;
                //button 1 clicked
            }
        });
        convertView.findViewById(R.id.button2).setOnClickListener(new Clicker(position) {
            public void onClick(View v)
            {
                int row = mPosition;
                //button 2 clicked
            }
        });
    }

onItemClick仅提供所选行,不提供触摸坐标,因此您无法手动确定单击了哪个子项

您可以在ListView中使用的行内的视图上设置OnClick侦听器

abstract class Clicker implements OnClickListener {
        int mPosition;
        public Clicker(int position) {
            mPosition = position;
        }
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            //inflate
        }

        //do your stuff
        convertView.findViewById(R.id.button1).setOnClickListener(new Clicker(position) {
            public void onClick(View v)
            {
                int row = mPosition;
                //button 1 clicked
            }
        });
        convertView.findViewById(R.id.button2).setOnClickListener(new Clicker(position) {
            public void onClick(View v)
            {
                int row = mPosition;
                //button 2 clicked
            }
        });
    }

onItemClick只提供所选行,不提供触摸坐标,因此您无法手动确定单击了哪个子项

我想在这些视图上查找单击事件,然后执行相应的操作,然后您必须在适配器本身中为这些视图编写clicklistener。Itemclick在这方面帮不了你。我想在这些视图上找到click事件,然后执行相应的操作。然后你必须在适配器本身中为这些视图编写clicklistener。Itemclick在这方面帮不上忙。那么,在实现onClickListener时,我如何知道选择了哪一行?我想知道行和视图。如果我实现onClickListener,则不会调用onItemClick。您可以将行位置保存到视图的标记中,并在单击时读取它。因此,在实现onClickListener时,我如何知道选择了哪一行?我想知道行和视图。如果我实现onClickListener,则不会调用onItemClick。您可以将行位置保存到视图的标记中,并在单击时读取它,而不是一个新类