Как получить доступ к идентификатору ресурса выбранного изображения в сетке в Android? - PullRequest
1 голос
/ 21 сентября 2011

Я использую gridview.setOnItemClickListener (новый AdapterView.OnItemClickListener () показать список изображений из папки для рисования ресурса. Я хочу знать, какое изображение выбрал пользователь - не его положение в списке, а фактический идентификатор ресурса. Я пробовал gridview.setOnItemSelectedListener, но это не вызывает возврата в мою программу при нажатии на изображение.

Разве параметр View в onItemClick не предполагает, что он указывает на изображение, которое щелкнуло? Если это так, то почему View.getID () всегда возвращает «no_id», то есть «-1».

Может ли кто-нибудь сказать, что я делаю не так?
Как вы получаете идентификатор ресурса того, что было выбрано? Спасибо.

9/21/11 7 утра. Обновление на основе предоставленных комментариев:

Мне нужен идентификатор ресурса, который автоматически генерируется во время компиляции и хранится в R.java. Я хочу использовать его, чтобы получить то же представление (изображение) в другом классе. Используя такой код:

Resources res =  getResources();
Drawable v = res.getDrawable(resid); //resid is from View.getID()

Я просто не понимаю, почему Адаптер передает всю информацию о View EXCEPT original-stored-generated-R.java Resource-ID. Насколько я понимаю, без этого вы не сможете получить тот же View, используя getDrawabale или getAnything. Я уверен, что другие сделали это успешно. Я просто нигде не могу найти пример.

 1. public void onCreate(Bundle savedInstanceState) {
 2. super.onCreate(savedInstanceState);
 3. setContentView(R.layout.picgridview);

 4. GridView gridview = (GridView) findViewById(R.id.gridviewforpics);
 5. gridview.setAdapter(new PicImageAdapter(this));

 6.  gridview.setOnItemClickListener(new AdapterView.OnItemClickListener()  {
 7.    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
 8.      Intent answer = new Intent(); 
 9.      int resid = v.getId();   // ß ALWAYS RETURNING  –1  ?????
10.      answer.putExtra("resid",resid); 
11.      setResult(RESULT_OK, answer); 
12.    }
13.  });

14. };// eof method

Ответы [ 4 ]

4 голосов
/ 07 декабря 2012

Внутри вашего метода onItemClick () вы можете использовать:

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

Теперь вы можете получить ItemID с помощью

i.getItemId(position)

Итак, если вы наберете

Toast.makeText(MainActivity.this, "" + i.getItemId(position), Toast.LENGTH_SHORT).show()

Вам будет показан ItemID

Здесь вы можете передать изображение другим действиям с намерением

Чтобы узнать, как отправить изображения другим действиям с намерениями, см. Как пройти рисование между действиями

Надеюсь, это поможет

3 голосов
/ 02 июля 2012

Я нашел решение.

Вам необходимо установить идентификатор каждого вида, view.setId(R.drawable.my_pic) при создании вида.

Я установил свой тип изображения в int, таким образом я могу найти и установить это изображение позже.

Затем вы можете повторно получить этот идентификатор и использовать его по своему усмотрению view.getId(). Надеюсь, это поможет

1 голос
/ 22 сентября 2011

Я проверил исходный код Android для View.java и из того, что я понял,

идентификатор представления по умолчанию установлен в «NO_ID»

Динамический идентификатор, которым вы являетесьссылка должна быть генерацией идентификатора Android, когда мы устанавливаем идентификаторы в XML-файле как android: id = "@ + id / layout_id".Когда это встречается, android генерирует нечто подобное в своем R-файле

public static final class id {
    public static final int layout_id=0x7f060000;
}

Так что, если вам нужно использовать идентификатор, вам нужно установить его в адаптере.

0 голосов
/ 21 сентября 2011

Метод onItemClick () имеет вид в AdapterView, который был выбран как параметр v. Чтобы получить идентификатор этого представления, просто

v.getId()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...