Android 单击按钮时获取列表视图项目位置

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20541821/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 03:00:38  来源:igfitidea点击:

Get listview item position on button click

androidandroid-listviewandroid-buttonlistitembuttonclick

提问by coder

This is my listview click event:

这是我的列表视图点击事件:

 lv1.setOnItemClickListener(new OnItemClickListener() {
       @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
                Object o = lv1.getItemAtPosition(position);
                ItemDetails obj_itemDetails = (ItemDetails)o;
                Toast.makeText(ListViewImagesActivity.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();

        }  
 });

And this is my button click event:

这是我的按钮点击事件:

btnNxt = (Button) findViewById(R.id.btnNext);
 btnNxt.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View arg0) {
  //Here I need to get that position
});

Now I need to get the position of the clicked listview item..I have declared postion globally but that always gives me position 1.

现在我需要获取单击的列表视图项的位置。我已经在全局范围内声明了位置,但这总是给我位置 1。

Can anyone say me how do I get the positon ?

谁能告诉我如何获得职位?

回答by Pasquale Anatriello

do you execute this

你执行这个吗

    btnNxt = (Button) findViewById(R.id.btnNext);
 btnNxt.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View arg0) {
  //Here I need to get that position
});

inside the getView method? if so it's very easy

在 getView 方法中?如果是这样,这很容易

     btnNxt = (Button) findViewById(R.id.btnNext);
     btnNxt.setTag(position);
     btnNxt.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View arg0) {
      int position=(Integer)arg0.getTag();
    });

回答by Karoly

I know I'm bit late with the answer, but what about this:

我知道我的答案有点晚了,但是这个呢:

private OnClickListener myButtonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
    View parentRow = (View) v.getParent();
    ListView listView = (ListView) parentRow.getParent();
    final int position = listView.getPositionForView(parentRow);
  }
};

in this case you don't need to set tags and so on.

在这种情况下,您不需要设置标签等。

回答by Lazy Ninja

If you are using ViewHolder make sure you use setTag() like this.

如果您使用的是 ViewHolder,请确保像这样使用 setTag()。

    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;


        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.custom_row, parent, false);
            holder.btnNxt = (Button) convertView.findViewById(R.id.btnNext);
            holder.btnNxt.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    int position=(Integer)arg0.getTag();
                });
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
          holder.btnNxt.setTag(position);   // <---- setTag() here 

            return convertView;
        }

        private class ViewHolder {
            Button btnNxt;
        }
    }

If you setTag() before your setOnClickListener() line, you will have problem when you scroll your listview.

如果在 setOnClickListener() 行之前使用 setTag(),滚动列表视图时会出现问题。

回答by r4jiv007

declare a global variable and in onItemClick() method of lisview set the view position as variable's value. now use same variable in click method of button.

声明一个全局变量,并在 lisview 的 onItemClick() 方法中将视图位置设置为变量的值。现在在按钮的单击方法中使用相同的变量。

int global_position =0; // your global variable 

 lv1.setOnItemClickListener(new OnItemClickListener() {
       @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
               global_position =position;
        }  
 });

btnNxt = (Button) findViewById(R.id.btnNext);
 btnNxt.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View arg0) {
    Toast.makeText(<context>,""+global_position,500).show();
});

回答by Ahamadullah Saikat

// use "top" to get listview items top position

// 使用“top”获取列表视图项的顶部位置

// Listview items top position

// Listview 项目顶部位置

    int top;
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View lView, final int pos, long id) {
            top = lView.getTop();
            if (top < 1) top = 1;
        }
    });

// Or // Listview items top position Under CustomAdapter's getView method

// 或者 // Listview items top位置在CustomAdapter的getView方法下

    int top;
    final View finalConvertView = convertView;
    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            top = finalConvertView.getTop();

            if (top < 1) top = 1;

        }
    });