0

在我的应用程序中,我使用 ListView 来选择要订购的项目。当我选择要订购的商品时,它会被选中并添加到订购页面中。如果我回到主页面,如果我再次来到项目列表,所选项目将被取消选中,但所选项目存在于订购页面中。应检查选定的项目,直到手动删除。请帮我解决这个问题。

这是我的代码:

     public View getView(final int position, View convertView, ViewGroup parent) 
    {


      final  ViewHolder holder;

        if (convertView == null) 
        {
            convertView = inflater.inflate(R.layout.selecteditemlistview, null);
            holder = new ViewHolder();

            holder.textViewSelectedText = (TextView)convertView.findViewById(R.id.selectedtext);
            holder.price=(TextView)convertView.findViewById(R.id.selectitemprice);
            holder.image=(ImageView)convertView.findViewById(R.id.selectitemimage);
            holder.qty=(EditText)convertView.findViewById(R.id.selectqty);
            holder.total=(TextView)convertView.findViewById(R.id.price);               
            holder.delete = (Button) convertView.findViewById(R.id.delete);

            holder.uncheck = (CheckBox)convertView.findViewById(R.id.bcheck);

            convertView.setTag(holder);
        }
        else 
        {
            holder = (ViewHolder) convertView.getTag();
        }
        String amount=holder.qty.getText().toString();
        final Double price1=Double.parseDouble(itemprice.get(position));
        int qut=Integer.parseInt(holder.qty.getText().toString());
        Double total=(price1*qut);
        holder.textViewSelectedText.setText(arr1.get(position));
        holder.price.setText(itemprice.get(position));
        holder.image.setImageBitmap(itemimage.get(position));
        holder.total.setText(String.valueOf(total));


        holder.delete.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 arr1.remove(position);
                 itemimage.remove(position);
                 itemprice.remove(position);
               //  holder.uncheck.setChecked(false);
                 View parent = (View)v.getParent(); 
                 CheckBox chkBox = (CheckBox)parent.findViewById(R.id.bcheck); 
                 if ((holder.arr1==true)&&(holder.uncheck.isChecked()))
                     {holder.uncheck.setChecked(false);
                     }
                 notifyDataSetChanged();


            }

        });



      holder.qty.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            if(!hasFocus)
            {

                 int position = v.getId();      
                final EditText Caption = (EditText) v;
                Caption.setFocusable(true); 
                holder.qty.setFocusable(true);
                int q=Integer.parseInt(holder.qty.getText().toString());
                Double result=(price1 * q);
                System.out.println(result);              
                holder.total.setText(String.valueOf(result));
                                }
        }
    });


        return convertView;     
    }

    class ViewHolder      
    {
         protected boolean arr1;
        public CheckBox uncheck;
        public Button delete;
         public TextView mTextView;

        TextView textViewSelectedText = null;
        TextView price=null;
        ImageView image=null;      
        EditText qty=null;
        TextView total=null;
    }  
4

1 回答 1

0

我知道的解决方案是手动的。您必须将所选项目的列表传递给您的 ListView。

你的主要活动

Intent intent = new Intent(this, YourListViewActivity.class);
// parcelables or a List of indexes (your choice but I prefer Parcelables)
// I assume that you have your selection stored in a List to work with it
// make SomeKey as a constant
intent.putParcelableArrayListExtra("SomeKey", listOfYourObjectsAsParcelables);
startActivityForResult(intent, requestCode); 

选择活动- 假设它扩展了 ListActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // load selection from the intent
    List<YourParcelableObject> parcelables = getIntent().getParcelableArrayListExtra("SomeKey");

    if (parcelables != null) {
        // convert to YourObject
        List<YourObject> selectedObjects = convert(parcelables);

        // iterate over the list and check items        
        for (int i = 0; i < getListView().getAdapter().getCount(); i++) {
            YourObject object = (YourObject) getListView().getAdapter().getItem(i);
            if (selectedObjects.contains(object)) {
                getListView().setItemChecked(i, true);
            }
        }
    } 
}

请注意,这只是一个片段,我没有对其进行测试,但它应该给你一个想法。

于 2012-05-23T09:13:29.613 回答