Определение того, какая копия пользовательского класса была использована

У меня есть настраиваемое представление xml, при нажатии кнопки в основном представлении создается дубликат.

Button addButton = (Button) findViewById(R.id.btnAdd);

addButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        LinearLayout newCard = (LinearLayout) getLayoutInflater().inflate(R.layout.vehicle, null);
        cardLayout.addView(newCard);
        final int thisCarId = new Random().nextInt(10000);
    }
});

Пользователь может нажимать кнопку addButton столько раз, сколько захочет, и каждый раз я создаю новую карту newCard.

Каждая новая карта имеет ImageButton и EditText; когда нажимается кнопка ImageButton, я запускаю намерение камеры с результатом:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, thisCarId);

Позже в этом классе действий я ожидаю результат действия камеры:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.v("car", "The ID that was returned: " + requestCode);
}

Мой журнал ДЕЙСТВИТЕЛЬНО определяет, какой экземпляр newCard, посредством thisCardId... но как я могу определить, какая newCard была создана, чтобы я мог установить ImageButton, найденный в этом макете newCard, в соответствии с фотографией камеры? Назначение фотографии не проблема... просто я не знаю, какую из них назначить, потому что onActivityResult выходит за рамки, и, насколько я могу судить, я не могу назначить анонимное переопределение для действия. в целом...


person James Perih    schedule 02.08.2013    source источник
comment
Я не совсем уверен, что понимаю, что вы пытаетесь сделать, но из я не могу назначить анонимное переопределение для действия в целом... вы имеете в виду установку OnClickListener на Activity ? Если это так, просто пусть ваш Activity реализует интерфейс View.OnClickListener.   -  person Squonk    schedule 03.08.2013
comment
Извините, слова не моя сильная сторона; я имел в виду установку анонимного onActivityResult, посвященного экземпляру newCard.   -  person James Perih    schedule 03.08.2013


Ответы (1)


Если я правильно понимаю ваш вопрос, вы можете сделатьnewCard.setTag(thisCarId), а затем прокрутить дочерние представления cardLayout для дочернего элемента, у которого есть тег, который вы ищете. Что-то типа

           for(int i = 0; i < cardLayout.getChildCount(); i++){
                if((Integer)cardLayout.getChildAt(i).getTag() == cardId){
                    //do something
                }
            }
person Kenny C    schedule 02.08.2013
comment
вау... так много о языке, которого я не знаю. Я собираюсь попробовать это. - person James Perih; 03.08.2013
comment
С большим количеством дочерних просмотров это было бы неэффективно. Вместо использования setTag(thisCarId) было бы лучше использовать setId(thisCarId). Затем в onActivityResult используйте cardLayout.findViewById(requestCode). - person Squonk; 03.08.2013
comment
Оо, я могу попробовать и это, Сквонк. Тем не менее, это дало мне нужный результат, за исключением того факта, что представления, которым не назначен тег, возвращаются нулевыми, поэтому мне приходится игнорировать нули и выпрыгивать, когда я закончу. - person James Perih; 03.08.2013
comment
@JamesPerih: На самом деле я только что вспомнил, что есть метод findViewWithTag(...), но я не часто его использую. Я не знаю, что наиболее эффективно, но я подозреваю, что использование целых чисел в качестве идентификаторов, а не тегов Object, должно быть быстрее. - person Squonk; 03.08.2013
comment
Также нужно следить за повторяющимися случайными числами. Может быть лучше с инкрементным счетчиком - person Kenny C; 03.08.2013
comment
Я использовал решение Squonk, так как сложность View стала более сложной из-за потребностей клиента (теперь требуется переменное количество ImageButtons). Тем не менее, я не могу комментировать решение, И решение Kenny C помогло сбросить все! - person James Perih; 03.08.2013