【问题标题】:Android ListItem with radio button带有单选按钮的 Android ListItem
【发布时间】:2012-02-07 00:07:44
【问题描述】:

我的页面有一个 listView 和一个 OK 按钮。每个 listItem 都有一个 id 和 RadioButtonGroup。 我正在使用 SimpleCursorAdapter 加载列表。

我想做的是,当我单击“确定”时,我想从该 radioButtonGroup 中获取个人 ID 和单选按钮选择。

我该怎么做?

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以在列表中添加点击监听器:

    list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        RadioButton button = (RadioButton) view.findViewById(R.id.RadioButton);
        button.getId();
    }
    });
    

    【讨论】:

      【解决方案2】:

      您必须扩展 SimpleCursorAdapter 类并在 newView / bindView 方法中检查 radioButtonGroup 的状态。为此,您需要使用OnCheckedChangedListener 为您的单选按钮组设置一个监听器。我有一些在个人应用程序上使用的源代码示例。请记住,我正在收听复选框,但应该非常直接以适应单选按钮组。

      @Override
      public void bindView(View view, Context context, Cursor cursor) {
      
          NoteHolder holder = (NoteHolder) view.getTag();
      
          holder.titleView.setText(cursor.getString(titleColIndex));
          holder.modifiedView.setText(mUtils.formatDate(mUtils.formatDateFromString (cursor.getString(modifiedColIndex), context, "dd-MM-yyyy"), "dd-MM-yyyy"));
          holder.priorityView.setImageResource(mUtils.getPriorityResourceId(cursor.getInt(priorityColIndex)));
      
          Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/ARLRDBD.TTF");
          holder.titleView.setTypeface(tf);
          holder.modifiedView.setTypeface(tf);
      
          final int pos = cursor.getPosition();
          final long id = cursor.getLong(idColIndex);
      
          holder.checkbox.setOnClickListener(new OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  checkChecked(v, pos, id);
              }
          });
      
          view.setOnClickListener(new OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  rowCheckChecked(v, pos, id);
              }
          });
      
          holder.checkbox.setChecked(itemChecked.get(pos));
      }
      
      private static class NoteHolder {
          TextView titleView;
          TextView modifiedView;
          ImageView priorityView;
          CheckBox checkbox;
      }
      
      private void checkChecked(View v, int pos, long id){
      
          CheckBox cb = (CheckBox) v.findViewById(R.id.delete_checkbox);
          if (cb.isChecked())
          {
              itemChecked.set(pos, true);
              mSelectedIDs.add(id);
          }
          else if(!cb.isChecked())
          {
              itemChecked.set(pos, false);
              if(mSelectedIDs.contains(id))
                  mSelectedIDs.remove(id);
          }
      }
      

      我建议您也使用 viewHolder 模式。特别是如果您的应用程序将有许多列表项。您可以阅读更多关于它的信息here 并查看示例here,您还可以在我上面放置的代码中看到它的实现。

      希望对您有所帮助。

      【讨论】:

      • 感谢您的回复。我正在阅读有关 ViewHolder 并尝试您提供的解决方案。现在我还有一个问题,如何在单击按钮时调用 getView?
      • 你不调用getView,并且对于这个例子你不使用getView,你使用newView,bindView,基本上它是getView,但它已经为newView或回收的View分开了。 bindView 总是被调用,newView 只有在它是新的时候才会被调用。检查此链接它也会对您有所帮助:android.amberfog.com/?p=296
      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      相关资源
      最近更新 更多