Внутри адаптера для просмотра списка есть проблема со слушателем нажатия кнопки - PullRequest
0 голосов
/ 15 января 2012
public class ImageAndTextListAdapter extends ArrayAdapter<ImageAndText> {

//   new method
    private ListView listView;
    private AsyncImageLoader asyncImageLoader;
     private ImageAndText imageAndText;

//constructor
public ImageAndTextListAdapter(Activity activity, List<ImageAndText> imageAndTexts) {
    super(activity, 0, imageAndTexts);


    asyncImageLoader = new AsyncImageLoader();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Activity activity = (Activity) getContext();


    ////////////////////////////////////////////////////////////////////////////////////////////////
    // Load the image and set it on the ImageView


    //new method
    // Inflate the views from XML
    View rowView = convertView;
    ViewCache viewCache;

    if (rowView == null) {
        LayoutInflater inflater = activity.getLayoutInflater();
        rowView = inflater.inflate(R.layout.image_and_text_row, null);
        viewCache = new ViewCache(rowView);
        rowView.setTag(viewCache);
    } else {
        viewCache = (ViewCache) rowView.getTag();
    }
    imageAndText = getItem(position);

    Button btn2=(Button) findViewById(R.id.button1);

      btn2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

                     //...........
               }
      });

Этот адаптер предназначен для ListView, и он принимает файл image_and_text_row.xml, который представляет данные строки в просмотре списка.Программа потерпела крах, когда я установил прослушиватель щелчков на btn2.Если прослушиватель удален, то программа работает нормально.

вопрос в том, почему у адаптера не может быть прослушиватель нажатий кнопок внутри кода?

Ответы [ 2 ]

1 голос
/ 15 января 2012

Просто выстрел в темноте: но ваша строка Button btn2=(Button) findViewById(R.id.button1); относится к ListActivity или ListView, в котором находится адаптер. Следовательно, R.id.button1 не существует ...

Вы пробовали: Button btn2=((Button)rowView.findViewById(R.id.button1)); Это может быть вашей проблемой (не имея возможности увидеть ваш logcat). findViewById() находит детей. Исходное утверждение будет искать дочерний элемент Activity или View. Этот новый оператор найдет дочерний элемент rowView.

Конечно, это предположение, поскольку, поскольку вы не полностью описали приложение или проблему, я должен предположить, согласно имеющейся у нас информации, что для каждой строки есть кнопка.

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

FuzzicalLogic

P.S. Надеюсь, вы поймали намек на то, что вы получите дрянные ответы, как этот, если не хватает соответствующей информации. Хороший гид это: 1) Что происходит? 2) Чего вы ожидаете? 3) На что указывают ваши ресурсы для отладки? 4) Какие дополнительные исследования или концепции нам нужно знать? Это приводит к более длинным вопросам, но они, безусловно, более эффективны, как и ответы на них.

0 голосов
/ 15 января 2012

Что вам нужно сделать, это добавить onClick в ваш XML-файл, где находится кнопка. Также убедитесь, что ваша кнопка находится в том же макете, который вы надуваете.

...