Android- Select an item of a GridView programmatically?

徘徊边缘 提交于 2021-02-07 19:21:35

问题


I want to perform a click on an item after setAdapter() method.

Consider if you have declared and initialized a Button in your Activity globally then you can perform a click on it programmatically from any scope of that activity and the listener will work. I want something similar like that, to be able to perform a click on any item of my GridView.

So far i have tried all of the below methods one by one but none of them seems to work, i tried different stack questions but not even a single answer worked for me. iconsGrid.setSelection(2);, iconsGrid.setSelected(true);, iconsGrid.performClick();, iconsGrid.performItemClick(iconsGrid, 2, 2);, iconsGrid.performItemClick(iconsGrid, 2, iconsGrid.getItemIdAtPosition(2));,

//Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mTextView = (TextView) findViewById(R.id.txt);
    Integer[] resource_icons = { 
            R.drawable.ic_attachment,
            R.drawable.ic_attachment,
            R.drawable.ic_attachment,
            R.drawable.ic_attachment,
            R.drawable.ic_attachment,
            R.drawable.ic_attachment };

    GridView iconsGrid = (GridView) findViewById(R.id.gv_icons);
    IconGridAdapter iconAdapter = new IconGridAdapter(this, resource_icons);
    iconsGrid.setAdapter(iconAdapter);
   /*
    * I want to perform a click here
    */
}

//Adapter
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater li;
    View grid;
    if (convertView == null) {
        grid = new View(mContext);
        li = ((Activity) mContext).getLayoutInflater();
        grid = li.inflate(R.layout.grid_cell_imageview, parent, false);
    } else {
        grid = (View) convertView;
    }

    ImageView imageView = (ImageView) grid.findViewById(R.id.image);
    imageView.setImageResource(imageId[position]);

    return grid;
}

回答1:


OK let's do this

declare one field in your adapter say

private int selectedPosition=-1;

now create a setter for this

private void setSelectedPosition(int position)
{
selectedPosition=position;
}

Now in your getView method

if(position==selectedPosition)
    {
    grid.setSelected(true);

    //OR

    grid.setBackgroundColor(<Some Color>);
    }

Now after setting the adapter

adapter.setSelectedPosition(<your desired selected item position>);

adapter.notifyDataSetChanged();



回答2:


In the xml file inside GridView just add android:listSelector="@drawable/your_selector" after adding this line if you code like -

gridView.setSelection(POSITION); //position starts from 0

It will highlight that particular item.

and for perform click use -

gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
                 //do whatever you want to do
        }
});


来源:https://stackoverflow.com/questions/31159080/android-select-an-item-of-a-gridview-programmatically

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!