2013-11-23 3 views
1

Я создаю приложение для Android, и я столкнулся с этой проблемой: у меня есть MainActivity, у которого есть макет gridview. Этот макет состоит из 6 значков. Я хочу 2 вещи для каждого значкаНазначение строки для каждого значка в gridview

1.На нажмите: начать новый вид деятельности (я думаю, я знаю, как это сделать)

2.На долго нажмите: показать короткую строку из/RES/значения/строки, которые связаны с этой иконой и деятельности

до сих пор мне удалось сделать заполнители для обоих действий, как так:

   super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      GridView gridview = (GridView) findViewById(R.id.gridview); 
      gridview.setAdapter(new ImageAdapter(this)); 

      //for each gridview item, we want one click reaction (that creates a new Activity) and 
      //a long click reaction, that shows an informative text on what this button does 

      //Simple Click Action 
      gridview.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
        //Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 
        //placeholder. In future will be replaced with new activity creation 
       } 
      }); 

      //Long Click Action 
      gridview.setOnItemLongClickListener(new OnItemLongClickListener(){ 
       public boolean onItemLongClick(AdapterView<?> parent, View v, int description, long id){ 
        Toast.makeText(MainActivity.this, "" ,Toast.LENGTH_LONG).show(); 
        return true; 
       } 
      }); 



    } 

Теперь то, что я хочу сделать, это в функции I Toast.makeText хотите напечатать строку ресурса. Эта строка отличается для каждого значка, и поэтому я чувствую, что она должна быть возвращена через класс ImageAdapter, который создает gridview. В этом классе, помимо всего прочего, я создал массив с идентификатором ресурса каждой строки. Так что я задал себе вопрос:

a) Как вернуть этот идентификатор ресурса, чтобы он мог использоваться MainActivity?

b) Если есть другой способ сделать это, что это?

Я новичок, так что вполне возможно, я сделал некоторые колоссальную ошибку

Спасибо за помощь заранее!

ответ

0

в onItemLongClick(...) используется параметр parent (который должен быть вашим GridView) и позвонить ...

ImageAdapter theAdapter = (ImageAdapter) parent.getAdapter(); 

в вашем ImageAdapter до тех пор, пока у вас есть метод, чтобы вернуть идентификаторы строк ресурсов, то вы можете использовать параметр position (с именем description в вашем коде) что-то вроде ...

int resId = theAdapter.getId(description); 

Тогда для Toast использования ...

Toast.makeText(MainActivity.this, MainActivity.this.getString(resId),Toast.LENGTH_LONG).show(); 
0

На Нажмите вы получите макет сетки, который вы установили в setOnItemClickListener, Переключите view.getId() так, что у вас есть 6 случай внутри включателем и сделать переход на каждом конкретном случае, как вам нужно, так же тост в случае setOnItemLongClickListener

0

Благодарим Вас за полезные answers.Turns, что я нашел другое решение, которое отлично работает ,

Видя, как «доступ» изображения в GridView вы создаете ссылки на них, я создал массив Integer ссылок, как это:

private Integer[] testDescriptions = { 
      R.string.reflexes_description, 
      R.string.agility_description, 
      R.string.intellect_description, 
      R.string.strength_description, 
      R.string.proximity_description, 
      R.string.voice_description }; 

и реализовал gridview.setOnItemLongClickListener следующим образом:

gridview.setOnItemLongClickListener(new OnItemLongClickListener(){ 
       public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id){ 
        Toast toast = Toast.makeText(MainActivity.this, testDescriptions[position] ,Toast.LENGTH_LONG); 
        TextView v1 = (TextView) toast.getView().findViewById(android.R.id.message); 
        if(v1 != null) v1.setGravity(Gravity.CENTER); 
        toast.show(); 
        return true; 
       } 
      }); 
Смежные вопросы