OnItemClickListener не работает?

1

Почему мой OnItemClickListener не работает?

public class UseAdp extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Context context=this;

    ListView lv=(ListView)  findViewById(R.id.list_v);

    MyAdapter adp=new MyAdapter(context);

    for (int i = 0; i < 50; i++) {
      adp.addItem("item " + i);
    }
    lv.setAdapter(adp);
    // lv.setItemsCanFocus(true);

    lv.setOnItemClickListener(new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
          long arg3) {
        // TODO Auto-generated method stub
        showToast(arg2);
      }
    });
    //registerForContextMenu(lv);      
  }

  public void showToast(int arg)
  {
    Toast.makeText(this, "Position"+arg, Toast.LENGTH_SHORT).show();
  }
}

Вот мой код адаптера:

public class MyAdapter extends BaseAdapter {

  private Context mcontext;
  private ArrayList<String> aList=new ArrayList<String>();  

  public MyAdapter(Context context) { 
     mcontext = context;          
  } 

  @Override
  public int getCount() {
    // TODO Auto-generated method stub
    return aList.size();   
  }

  @Override
  public Object getItem(int position) {
    // TODO Auto-generated method stub
    return aList.get(position);
  }

  @Override
  public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
  }

  public void addItem(final String item) {
    aList.add(item);
    //notifyDataSetChanged();
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {

     // TODO Auto-generated method stub
     LayoutInflater inflater = (LayoutInflater)mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

     convertView=inflater.inflate(R.layout.list_rows,parent,false);


     ((TextView)convertView.findViewById(R.id.txt1)).setText(getItem(position).toString());
     ((ImageView)convertView.findViewById(R.id.img1)).setImageResource(R.drawable.icon);
     if(position==2){
     ((CheckBox)convertView.findViewById(R.id.CheckBox01)).setChecked(true);
     }
     return convertView;
  }
}
  • 0
    Как это "не работает"? Каково его текущее поведение и каково его ожидаемое поведение?
  • 0
    ничего не происходит, когда я нажимаю на список ..
Теги:

2 ответа

0
Лучший ответ

Я думаю, что вы не использовали метод viewholder(), он отлично работает, когда я его проверил. См. Полный код:

public class FirstScreen extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView lv=(ListView) findViewById(R.id.ListView01);


        MyAdapter adp=new MyAdapter(getApplicationContext());

        for (int i = 0; i < 50; i++) {
            adp.addItem("item " + i);
        }
        lv.setAdapter(adp);
       // lv.setItemsCanFocus(true);

       lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                showToast(arg2);
            }
        });
        //registerForContextMenu(lv);

    }

    public void showToast(int arg)
    {
        Toast.makeText(this, "Position"+arg, Toast.LENGTH_SHORT).show();
    }

     class MyAdapter extends BaseAdapter {

        private Context mcontext;
        private ArrayList<String> aList=new ArrayList<String>();    

         public MyAdapter(Context context) { 
             mcontext = context;          
        } 

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return aList.size();

        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return aList.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
         public void addItem(final String item) {
             aList.add(item);
             //notifyDataSetChanged();
         }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

             // TODO Auto-generated method stub
             LayoutInflater inflater = (LayoutInflater)mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

             convertView=inflater.inflate(R.layout.list_row,parent,false);


             ((TextView)convertView.findViewById(R.id.txt1)).setText(getItem(position).toString());
             ((ImageView)convertView.findViewById(R.id.img1)).setImageResource(R.drawable.icon);

             return convertView;
        }

        }

     static class ViewHolder {
         TextView   tab1Text;
         ImageView  backgrouundView;
    }

}

main.xml и list_row здесь не включены.

  • 0
    Да ViewHolder разобрал большую часть моей проблемы .. Большое спасибо ..
  • 0
    Могу ли я использовать ViewHolder на моем LinerLayout также, то есть фон в виде списка в каждой строке.
Показать ещё 1 комментарий
0

Попробуйте заполнить ListView getListView() вместо findViewById() (я предполагаю, что ваша деятельность расширяет ListActivity)

  • 0
    нет, это простая деятельность ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню