将列表视图中的已检查项目转移到另一个列表 - 视图中的按钮单击android

时间:2016-01-06 07:58:09

标签: android android-layout listview android-intent android-listview

我有listview数据使用customAdapter.class现在我想要的是在按钮点击时将listview中的选中项目转移到secondActivity ...

 btest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SparseBooleanArray checked = listView.getCheckedItemPositions();
            ArrayList<Model> mylist = new ArrayList<Model>();
             for (int i = 0; i < checked.size(); i++) {
                    int position = checked.keyAt(i);
                    if (checked.valueAt(i))
                        // listView = new ArrayList<Model>();
                        mylist.add(String.valueOf(adapter.getItem(position)));

                }
                String[] output = new String[mylist.size()];
                for (int i = 0; i < mylist.size(); i++) {
                    output[i] = (mylist.get(i));

                }
                Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
                Bundle b = new Bundle();
                b.putStringArray("selectedItems", output);
                // b.putStringArrayList("SelectedItems: ",list);
                // b.putString("selectedItems", String.valueOf(output));
                intent.putExtras(b);
                startActivity(intent);*/
            }
    });

这是我在另一个listview中获取该数据的第二个活动

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.result);
    Bundle b = getIntent().getExtras();
    String[] result = b.getStringArray("selectedItems");
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, result);
    lv.setAdapter(adapter);
}

2 个答案:

答案 0 :(得分:1)

将自定义列表发送到另一个活动时所遵循的方法将不起作用。为了在活动之间传输自定义列表,您需要创建Parcelable List并通过意图发送它。

  

Android Intents不支持自定义列表。

     

自定义列表可以通过两种方式传递: 序列化和Parcelable 。   但 Parcelable 更高效,更易于实施。

Refer this link to send custom list between activities through Parcelable

This link will give you much better idea to implement Parcelable.

更新代码:更改您的型号代码,如下所示。

 public class Model implements Parcelable{
    private String name;
    private int selected;

    public Model(String name){
        this.name = name;
        selected = 0;
    }

    public String getName(){
        return name;
    }

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

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

    /**
    * Storing the Student data to Parcel object
    **/
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(selected);

    }

 private Model (Parcel in){
        this.name = in.readString();
        this.selected = in.readInt();
    }

public static final Parcelable.Creator<Model> CREATOR = new Parcelable.Creator<Model>() {

        @Override
        public Student createFromParcel(Parcel source) {
            return new Student(source);
        }

        @Override
        public Model[] newArray(int size) {
            return new Model[size];
        }
    };
}

然后在MainActivity中执行此操作..

Intent next = new Intent(MainActivity , ResultActivity.class);
next.putParcelableArrayListExtra("model_data", (ArrayList<? extends Parcelable>) selectedItems);
startActivity(next);

在ResultActivity中执行此操作。

ArrayList<Model> his = getIntent().getParcelableArrayListExtra("model_data");

试试上面的代码.. 祝你好运.. !!

答案 1 :(得分:0)

我通过点击按钮将listview中的选中项目保存到sqlite来解决。另一个按钮打开新活动并以这种方式调用所选项目sqlite ... oncheckchange添加和删除arraylist中的项目,并按照这样的方式点击onbutton点击...

  public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder view = null;
    Support support = (Support) this.getItem(position);
    if (convertView == null){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.view_items, null);
        view = new ViewHolder();
        view.tvInfo = (TextView) convertView.findViewById(R.id.tvInfo);
        view.cb = (CheckBox) convertView.findViewById(R.id.cb);
        convertView.setTag(view);

        view.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                CheckBox cb = (CheckBox) buttonView;
                Support support = (Support) cb.getTag();
                support.setSelected(cb.isChecked());
                if (isChecked){
                    selList.add(support.status);
                    selID.add(support.id);
                    selType.add(support.type);
                  //  Toast.makeText(CustomAdapter.this, "Clicked on Checkbox: " + cb.getText() + " is " + cb.isChecked(), Toast.LENGTH_LONG).show();
                }else {
                    selList.remove(support.status);
                    selID.remove(support.id);
                    selType.remove(support.type);
                }
            }
        });
    }else{
        view = (ViewHolder) convertView.getTag();
        view.cb = view.getCb();
        view.tvInfo = view.getTvInfo();
    }
    view.cb.setTag(support);
    support = list.get(position);
    String id = support.getId();
    String status = support.getStatus();
    String type = support.getType();
    view.cb.setChecked(support.isSelected());
   // view.tvInfo.setText(id + "," + status + "," + type);
    view.tvInfo.setText(status);
    return convertView;
}

这是添加到db

的按钮编码
 btest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           handler.addSelected(adapter.selList, adapter.selID, adapter.selType);

这就是如何插入sqlite ..

public void addSelected(ArrayList<String> selList, ArrayList<String> selID, ArrayList<String> selType) {

    int size = selID.size();

    SQLiteDatabase db = getWritableDatabase();
    try{
       for (int i = 0; i < size ; i++){
            ContentValues cv = new ContentValues();
          //  cv.put(KEY_ID, selID.get(i).toString());
           cv.put(KEY_ID, selID.get(i));
             cv.put(KEY_STATUS, selList.get(i));
           cv.put(KEY_TYPE, selType.get(i));
            Log.d("Added ",""+ cv);
            db.insertOrThrow(TABLE_SELECTED, null, cv);
        }
        db.close();
    }catch (Exception e){
        Log.e("Problem", e + " ");
    }
}

从像这样的

回来
 public ArrayList<String> getSelected() {
    SQLiteDatabase db = this.getReadableDatabase();
    ArrayList<String> result = null;
    try{
        result = new ArrayList<String>();
      //  String query = "SELECT * FROM " + TABLE_SELECTED;
        String query = "SELECT " + KEY_ID + " FROM " + TABLE_SELECTED;

        Cursor c = db.rawQuery(query, null);
        if (!c.isLast()){
            if (c.moveToFirst()){
                do{
                    String sel_name = c.getString(c.getColumnIndex("_id"));
                    result.add(sel_name);
                    Log.d("Added ", sel_name);
                }while (c.moveToNext());
            }
        }
        c.close();
        db.close();
    }catch (Exception e){
        Log.e("Nothing is to show", e + " ");
    }
    return result;
}