2013-09-27 1 views
0

В настоящее время у меня есть сетка с адаптером адаптера и фильтром. Я пытаюсь создать контекстное меню, основанное на длинном клике на элементе gridview. Однако перед добавлением фильтра я бы указал, какой элемент был нажат в зависимости от его положения, теперь, когда элементы фильтруются, позиции меняются, поэтому любое предпринятое действие использует неправильный ресурс/выбирает неправильный элемент. Любая идея вокруг этого?GridView создает контекстное меню с фильтром

Вот мой GridView инициализации:

final GridView gridview = (GridView) findViewById(R.id.gridview); 
    aAdpt = new shareadapter(planetsList, this); 
    gridview.setAdapter(aAdpt); 
    gridview.setTextFilterEnabled(true); 
    this.registerForContextMenu(gridview); 

Вот мой onClickListener (В качестве примера того, как я обычно получить отфильтрованный элемент для использования в деятельности/намерения:

gridview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
       int position, long id) { 
      Planet link = (Planet) gridview.getItemAtPosition(position); 
      Intent i = new Intent(ShareActivity.this, 
        ShareActivitySecond.class); 
      i.putExtra("IdImgFull", link.getIdImgFull()); 
      i.putExtra("IdImgShare", link.getIdImgShare()); 
      startActivity(i); 
      // startSecondActivity(position); 
     } 
    }); 

И вот мое контекстное меню для создания, поскольку вы можете видеть, что это зависит от позиции, и я не уверен, как добавить переменную int link.getIdImgShare()

в к нему.

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) {MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.shareactivity, menu); 
} 

    @Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    int IndexSelected = info.position; 
    switch (item.getItemId()) { 
    case R.id.share: 
     shareMethod(IndexSelected); 
     return true; 
    case R.id.save: 
     saveMethod(IndexSelected); 
     return true; 
    default: 
     return true; 
    } 
} 

ответ

0

Удалось решить эту проблему!

Вызывается мой адаптер и массив внутри onContextItemSelected, и оттуда была возможность установить переменную в действие. Решающие две линии:

Planet planet = aAdpt.getItem(aInfo.position); 
int IdImgShare = planet.getIdImgShare(); 

Полный раздел:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo aInfo = (AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    Planet planet = aAdpt.getItem(aInfo.position); 
    int IdImgShare = planet.getIdImgShare(); 
    switch (item.getItemId()) { 
    case R.id.share: 
     shareMethod(IdImgShare); 
     return true; 
    case R.id.save: 
     saveMethod(IdImgShare); 
     return true; 
    default: 
     return true; 
    } 
} 
Смежные вопросы