如何使用自定义列表视图实现复选框

时间:2015-02-02 15:16:44

标签: android

我想用他们的价格,名称,图片和复选框制作产品清单, 用户根据用户需要检查产品,然后将其传递给第二个活动, 在第二个活动中它显示了用它们的价格检查的项目,那么我必须使用什么方法专门用于复选框输入,我是android的新手所以请帮助我,

2 个答案:

答案 0 :(得分:0)

在java中,您必须实例化放入布局中的每个复选框(即CheckBox checkbox1 = new (Checkbox) findViewById(R.id.checkbox1); 然后你要做的就是在你的onCreate中添加一些if()语句,如下所示:

if(checkbox1.isChecked == true){
//send the info to your next activity
}else{
//nothing
}

答案 1 :(得分:0)

我想你有一个产品的价格,名称......

您必须使用所需的格式创建布局(list_row.xml),例如:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:background="?android:attr/activatedBackgroundIndicator"
android:layout_height="match_parent">

<TextView
    android:id="@+id/tv_subtitle_list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/tv_title_list"
    android:layout_below="@+id/tv_title_list"
    android:longClickable="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tv_title_list"
    android:longClickable="true" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignRight="@+id/tv_title_list"
    android:layout_alignBottom="@+id/tv_title_list"
    android:id="@+id/img_sync"
    android:longClickable="true" />

</RelativeLayout>

之后,您需要一个列表适配器,最好的方法是创建一个自定义列表适配器

public class ProductListAdapter extends ArrayAdapter<Product>
{
private  List<Product> objects;
private Context context;

public ProductListAdapter(Context context, int textViewResourceId, List<Product> objects) 
{
    super(context, textViewResourceId, objects);
    this.context = context;
    this.objects = objects;

}


@Override
public int getCount() {
    return objects.size();
}

@Override
public Incidence getItem(int position) {
    return objects.get(position);
}


@Override
public long getItemId(int position) {

    if(objects.get(position)==null) return -1;
    return objects.get(position).getId(); // your database id

}

   @Override
public void addAll(Collection<? extends Product> objects) {
    this.objects= new ArrayList<>(objects);
    notifyDataSetChanged();
}




@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    Incidence rowItem = getItem(position);  // get selected item

    if (convertView == null)
    {
        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        convertView = mInflater.inflate(R.layout.list_row, null);
    }

    /* Access to row components  */

    TextView title = (TextView) convertView.findViewById(R.id.tv_title_list); // name
    TextView subtitle = (TextView) convertView.findViewById(R.id.tv_subtitle_list); // price
    ImageView img = (ImageView) convertView.findViewById(R.id.img_sync); // image


    title.setText(rowItem.getName());
    subtitle.setText(rowItem.getPrice());
    img.setImageResource(android.R.drawable.ic_menu_share);  


    return convertView;
}

}

在您的片段或活动中,您可以创建适配器:

public class FragListIncidences extends ListFragment
{


    public void initUI() // include this in your onCreate
    {
        mAdapter = new  ProductListAdapter(getActivity(),
                android.R.layout.simple_list_item_1, new ArrayList<Product>());

        setListAdapter(mAdapter); // because of ListFragment
    }
}

您需要的复选框功能可以通过两种方式实现:

  • 在list_row.xml中添加Cechbox组件
  • 您可以使用上下文操作模式菜单。这里有一个示例http://developer.android.com/intl/es/guide/topics/ui/menus.html#CAB

    public void initUI() // include this in your onCreate
    {
        mAdapter = new  ProductListAdapter(getActivity(),
                android.R.layout.simple_list_item_1, new ArrayList<Product>());
    
        setListAdapter(mAdapter); // because of ListFragment
       mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    
        mListView.setMultiChoiceModeListener(new  AbsListView.MultiChoiceModeListener()
        {
    
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position,
                                                  long id, boolean checked) {
                // Here you can do something when items are selected/de-selected,
                // such as update the title in the CAB
    
                final int checkedCount = mListView.getCheckedItemCount();
                mode.setTitle(checkedCount + " Selected");
    
            }
    
            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                // Respond to clicks on the actions in the CAB
    
    
                    switch (item.getItemId()) {
    
                        case R.id.action_get:
                            getSelectedItems();
                            mode.finish(); // Action picked, so close the CAB
                            return true;
    
                        default:
                            return false;
                    }
    
                return false;
            }
    
            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                // Inflate the menu for the CAB
                MenuInflater inflater = mode.getMenuInflater();
                contextual_menu =menu;
                inflater.inflate(R.menu.subactions, menu);
    
    
            }
    
            @Override
            public void onDestroyActionMode(ActionMode mode) {
                // Here you can make any necessary updates to the activity when
                // the CAB is removed. By default, selected items are deselected/unchecked.
    
    
            }
    
            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                // Here you can perform updates to the CAB due to
                // an invalidate() request
                 return false;
       }
     });
     }
    
    
     private void getSelectedItems()  {
          final SparseBooleanArray selected = mListView.getCheckedItemPositions();
    
    
          for (int i = (selected.size() - 1); i >= 0; i--)
             if (selected.valueAt(i))
                  doWhateverYouWant (selected.keyAt(i));
    }