如何在自定义列表视图中获取已检查的项目ID,并在android中进行多项选择

时间:2013-08-29 09:22:19

标签: android android-layout android-listview

如何在自定义列表视图中获取已检查的项目ID(自定义ID,而不是所选项目的位置或名称 - 在我的情况下我需要检索的命令ID),在android中有多个选项。 我有来自json的订单名称和订单ID,并且它在自定义列表视图中填充,在自定义列表视图中,我有文本视图和复选框,但是如何获取所选/已检查订单的Orderid。

当我点击按钮时我有一个按钮我需要检索id而不是名称或位置,在我的情况下我需要检索订单ID enter image description here

3 个答案:

答案 0 :(得分:1)

您只需致电ListView.getCheckedItemIds()即可。它会返回一个包含所有已检查ID的long []。 还有ListView.getCheckedItemPositions()将为您提供所有已检查的职位。

确保在ListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)中设置onCreate()或设置视图(或在布局xml中)。

要获取选中的值,您只需执行此操作:

SparseBooleanArray checked = mListView.getCheckedItemPositions();
for (int i = 0; i < checked.size(); i++) {
    if (checked.valueAt(i)) {
        int pos = checked.keyAt(i);
        Object o = mListView.getAdapter().getItem(pos);
        // do something with your item. print it, cast it, add it to a list, whatever..
}

答案 1 :(得分:0)

Jerry,将您的订单对象设置为具有选择事件[CheckBox,TextView,Row view]的视图的标签,当用户选择项目时,您可以从标签中获取所选订单对象,您可以获得该对象的任何成员(订单) )。对于前。

订单对象

Order {
int id;
String name;
boolean isSelected;

//add getters and setters
}

void getview(...) {
     View v = //inflate view
     CheckBox cb = (CheckBox) v.findViewById(..);
     cb.setTag(yourlist.get(position));
     cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
             ((Order) buttonView.getTag()).setSelected(isChecked);
        }
     });

}

答案 2 :(得分:0)

我解决了并使用下面的代码得到了OrderId,这对我有用,我可以检索我传递给列表的自定义ORDERID

                      int isSelectedOrderNumber=0;
          mOpenOrdersSelected = new ArrayList<OpenOrders>();              
                      StringBuffer sb = new StringBuffer();
          Iterator<OpenOrders> it = mOpenOrders.iterator();
          while(it.hasNext())
          {
              OpenOrders objOpenOrders = it.next();
              //Do something with objOpenOrders
              if (objOpenOrders.isSelected()) {
                  isSelectedOrderNumber++;
                  mOpenOrdersSelected.add(new OpenOrders(objOpenOrders.getOrderID(),objOpenOrders.getOrderName()));
                  sb.append(objOpenOrders.getOrderID());
                  sb.append(",");
                }
             }

          //Below Condition Will Check the selected Items With parameter passed "mMAX_ORDERS_TOBEPICKED"
            if(isSelectedOrderNumber<1){
                ShowErrorDialog("Please Select atleast One order");
                return;
            }
            if(isSelectedOrderNumber>mMAX_ORDERS_TOBEPICKED){
                ShowErrorDialog(" Select Maximum of  "+mMAX_ORDERS_TOBEPICKED+ " Orders only to process");
                return;
            }
           Log.d(MainActivity.class.getSimpleName(), "cheked Order Items: " +sb);  
           Toast.makeText(getApplicationContext(), "cheked Order Items id:" +sb, Toast.LENGTH_LONG).show();