2014-07-09 55 views
0

我正在创建一个带有textview和复选框的自定义列表视图项目。每当选中与用户相对应的复选框时,我都希望在烤面包片中看到他的名字。我已经使用了以下代码:如何在列表视图中获取所选用户名

mUserList.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // TODO Auto-generated method stub 
       Toast.makeText(ManualInviteActivity.this, position, Toast.LENGTH_SHORT).show(); 
       Users1 user = (Users1) parent.getItemAtPosition(position); 
       if(user.isSelected()==true) 
       { 
        Toast.makeText(getBaseContext(), user.getName(), Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

但是,当我切换复选框时,我没有看到任何东西。这里有什么错误? 感谢 (isSelected和的getName是在用户级的我自己的函数)

适配器代码:

public class UserListAdapter extends ArrayAdapter<Users1> { 

    static Context context; 
    static int layoutResourceId; 
    Users1 data[] = null; 

    public UserListAdapter(Context context, int layoutResourceId, Users1[] data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    static class UserHolder { 
     TextView txtTitle; 
     CheckBox cbxUser; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     UserHolder holder = null; 

     if (row == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 
      holder = new UserHolder(); 
      holder.txtTitle = (TextView) row.findViewById(R.id.user_name); 
      holder.cbxUser = (CheckBox) row.findViewById(R.id.user_checked); 
      row.setTag(holder); 
     } else { 
      holder = (UserHolder) row.getTag(); 
     } 

     Users1 weather = data[position]; 
     holder.txtTitle.setText(weather.title); 
     holder.cbxUser.setChecked(weather.isSelected()); 
     // holder.txtTitle2.setText(weather.title2); 
     // holder.txtTitle2.setText(weather.title2); 
     // holder.txtTitle3.setText(weather.title3); 
     return row; 
    } 

} 

用户1类:

public class Users1 { 

    public String title; 
    boolean selected = true; 

    public Users1() 
    { 
     super(); 
    } 

    public Users1(String title,boolean selected) { 
     super(); 
     this.selected = selected; 
     this.title = title; 
    } 

    public String getName() { 
    return title; 
    } 
    public void setName(String name) { 
    this.title = name; 
    } 

    public boolean isSelected() { 
    return selected; 
    } 
    public void setSelected(boolean selected) { 
    this.selected = selected; 
    } 

} 
+0

如果无法检查列表项内。在 Nepster

+0

而不是itemClickListener。使用适配器类内复选框的checkChangedListener。 – Nepster

+0

是否解决了这个问题?在这里使用listview会使事情变得更加困难,除非你单独访问全局复选框,如果你想单独使用它,它不应该依赖于列表视图的“getView()”方法 – user2450263

回答

0

您需要使用onCheckedStateChange的复选框。

+0

你能给我一个例子准确地做到这一点?我不明白。 –

+0

该复选框位于列表项内。那么我怎样才能直接使用这个功能呢? –

0

您需要为您的RadioGroup(而不是您的列表)设置一个监听器。 事情是这样的:

RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup1); 
    OnCheckedChangeListener OCCL = new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      switch (checkedId) { 
      case R.id.radio1: 
       //... 
       break; 
      case R.id.radio2: 
       //... 
       break; 
      case R.id.radio3: 
       //... 
       break; 
      default: 
       break; 
      } 
     } 
    }; 
    radioGroup.setOnCheckedChangeListener(OCCL); 
0
 holder.checkbox 
       .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
         Toast.makeText(getBaseContext(), user.getName(), Toast.LENGTH_SHORT).show(); 


        } 
       }); 
0

试试这个代码

public class Customadapter extends BaseAdapter { 

    Context context; 
    ArrayList<String> names; 
    LayoutInflater inflater; 
    public Customadapter(Context context, ArrayList<String> names) { 
     this.names = names; 
     this.context = context; 
     inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

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

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

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

    public class Holder { 
     TextView name; 
     CheckBox check; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup arg2) { 
     final Holder holder; 
     if(convertView==null) 
     { 
      holder=new Holder(); 
      convertView=inflater.inflate(R.layout.checkbox,null); 
      holder.name=(TextView) convertView.findViewById(R.id.textView1); 
      holder.check=(CheckBox) convertView.findViewById(R.id.checkBox1); 
      convertView.setTag(holder); 
      holder.check.setId(position); 
     } 
     else 
     { 
      holder=(Holder) convertView.getTag(); 
     } 
     holder.name.setText(names.get(position)); 
     holder.check.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Toast.makeText(context,""+names.get(holder.check.getId()),Toast.LENGTH_SHORT).show(); 

      } 
     }); 

     return convertView; 
    } 

} 
+0

这是列表适配器代码的一部分,还是我把它放在列表项监听器中? –

+0

这是列表适配器的一部分 –

+0

请参阅我的更新问题。我已经使用自定义类将数据分配给适配器,而不是数组列表本身。如何将你的代码合并到这个?另外,为什么你应该将该位置分配给textview?谢谢 –

相关问题