Android 你的监听器坏了吗?

Android 你的监听器坏了吗?,android,Android,为什么我的监听器不工作 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); Con

为什么我的
监听器不工作

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();
  }
}
公共类useapp扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
上下文=这个;
ListView lv=(ListView)findViewById(R.id.list\u v);
MyAdapter adp=新的MyAdapter(上下文);
对于(int i=0;i<50;i++){
adp.增补(“项目”+i);
}
低压设置适配器(adp);
//lv.setItemsCanFocus(真);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
showtoots(arg2);
}
});
//registerForContextMenu(lv);
}
公共void showtoos(内部参数)
{
Toast.makeText(这是“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;
  }
}
公共类MyAdapter扩展了BaseAdapter{
私有上下文;
private ArrayList aList=new ArrayList();
公共MyAdapter(上下文){
mcontext=上下文;
} 
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回aList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
公共无效附加项(最终字符串项){
1.增加(项目);
//notifyDataSetChanged();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
LayoutInflater充气器=(LayoutInflater)mcontext.getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(右布局。列表行,父,false);
((TextView)convertView.findViewById(R.id.txt1)).setText(getItem(position.toString());
((ImageView)convertView.findViewById(R.id.img1)).setImageResource(R.drawable.icon);
如果(位置==2){
((复选框)convertView.findviewbyd(R.id.CheckBox01)).setChecked(true);
}
返回视图;
}
}

试着用
getListView()
而不是
findViewById()
来填充您的
ListView
(我假设您的活动扩展了
ListActivity

我想您没有使用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;
    }

}
public class FirstScreen扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lv=(ListView)findViewById(R.id.ListView01);
MyAdapter adp=新的MyAdapter(getApplicationContext());
对于(int i=0;i<50;i++){
adp.增补(“项目”+i);
}
低压设置适配器(adp);
//lv.setItemsCanFocus(真);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
showtoots(arg2);
}
});
//registerForContextMenu(lv);
}
公共void showtoos(内部参数)
{
Toast.makeText(这是“Position”+arg,Toast.LENGTH_SHORT).show();
}
类MyAdapter扩展了BaseAdapter{
私有上下文;
private ArrayList aList=new ArrayList();
公共MyAdapter(上下文){
mcontext=上下文;
} 
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回aList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
公共无效附加项(最终字符串项){
1.增加(项目);
//notifyDataSetChanged();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
LayoutInflater充气器=(LayoutInflater)mcontext.getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(右布局。列表行,父,false);
((TextView)convertView.findViewById(R.id.txt1)).setText(getItem(position.toString());
((ImageView)convertView.findViewById(R.id.img1)).setImageResource(R.drawable.icon);
返回视图;
}
}
静态类视窗夹{
文本视图选项卡1文本;
图像视图背景视图;
}
}

这里不包括main.xml和list_行。

它以什么方式“不起作用”?它当前的行为和预期的行为是什么?当我点击列表时,什么都不会发生。我可以在我的LinerLayout上同时插入ViewHolder吗?即每行列表视图上的背景吗?哦,当然你可以很容易地做到这一点。只需在ViewHolder中创建背景图像的实例,在getView()方法中接收它,然后使用以下代码:if(position==selectedListItem){holder.backgroundImage.setBackgroundColor(Color.LTGRAY);}else{holder.backgroundImage.setBackgroundResource(R.drawable.listing_bg_gray)}希望您能理解。