2015-07-01 3 views
3

Я хочу выполнить щелчок по элементу после метода setAdapter().Android - программно выбирает элемент GridView?

Рассмотрим, если вы объявили и инициировало кнопку в вашей деятельности глобально, то вы можете выполнить щелчок на нем программно из любого объема этой деятельности, и слушатель будет работать. Я хочу что-то подобное, чтобы иметь возможность выполнить щелчок по любому элементу моего GridView.

До сих пор я пробовал все приведенные ниже методы один за другим, но ни один из них, похоже, не работает, я пробовал разные вопросы по стеклу, но ни один ответ не работал для меня. 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; 
} 
+0

, что вы хотите достичь путем выбора программно может быть, мы можем найти другой способ? –

+0

Я хочу добиться выбора, например, когда пользователь нажимает любой элемент в gridView, он подсвечивается с помощью селектора по умолчанию – mushahid

ответ

6

OK давайте сделаем это

объявить одно поле в адаптере сказать

private int selectedPosition=-1; 

Теперь создайте установщик для этого

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

Теперь в методе GetView

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

    //OR 

    grid.setBackgroundColor(<Some Color>); 
    } 

Теперь после установки адаптера

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

adapter.notifyDataSetChanged(); 
+1

Блестящий, спасибо большое. 'notifyDataSetChanged' - вот ключ, который я считаю. –

3

В файле XML внутри GridView просто добавить android:listSelector="@drawable/your_selector" после добавления этой строки, если вы код, как -

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

Он выделит этот конкретный элемент.

и для выполнения использования клика -

gridView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { 
       //do whatever you want to do 
     } 
}); 
Смежные вопросы