如何在android中再次打开arraylist时预选复选框显示

时间:2016-08-30 09:39:30

标签: java android

首先,我使用复选框选择一些数组项,然后在第二个活动中显示它。之后,我再次打开ArrayList的第一个活动,但我的复选框选择清除。

以下是我的代码

public class Occassion extends AppCompatActivity implements View.OnClickListener,AdapterView.OnItemClickListener {

ListView listView_occassion;
ArrayAdapter<String> adapterOccassion;
Button mButtonOccassionNext;
int position;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_occassion);

    listView_occassion = (ListView) findViewById(R.id.occassion_listview);
    mButtonOccassionNext = (Button) findViewById(R.id.btn_occassion_next);

    listView_occassion.setOnItemClickListener(this);

    String[] Occassion = getResources().getStringArray(R.array.occassion_array);

    adapterOccassion = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, Occassion);


    listView_occassion.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    listView_occassion.setAdapter(adapterOccassion);
    mButtonOccassionNext.setOnClickListener(this);

}

@Override
public void onClick(View view) {

    Intent intent = new Intent(getApplicationContext(),Filters.class);
    startActivity(intent);

}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

    SparseBooleanArray checked = listView_occassion.getCheckedItemPositions();

    ArrayList<String> selectedItemsOccassion = new ArrayList<String>();
    Utils.occassionArrayList.clear();

    for (i = 0; i < checked.size(); i++) {
        // Item position in adapter
        int position = checked.keyAt(i);
        // Add sport if it is checked i.e.) == TRUE!
        if (checked.valueAt(i))
            // selectedItemsFlavour.add(adapterFlavour.getItem(position));
            Utils.occassionArrayList.add(adapterOccassion.getItem(position));
    }

}

}

显示第二项活动结果..

mtv_occassion_status = (TextView) findViewById(R.id.tv_occassion_status);

if(!Utils.occassionArrayList.isEmpty()){
        String tempOccassion= String.valueOf(Utils.occassionArrayList);
        mtv_occassion_status.setText(tempOccassion);
    }

我的数组列表在String.xml中添加

<string-array name="occassion_array">
    <item>Birthday</item>
    <item>Wedding</item>
    <item>Anniversary</item>
    <item>Celebration</item>
    <item>Get Well Soon</item>
    <item>House warming</item>
    <item>Valentines Day</item>
    <item>Diwali</item>
    <item>Friendship Day</item>
    <item>X-Mas</item>
    <item>New Year</item>
    <item>Random</item>
</string-array>

任何帮助对我来说都很棒。

2 个答案:

答案 0 :(得分:2)

创建一个类:

class Occasion {
public String name;
public boolean status;
}

之后创建一个arraylist:

ArrayList<Occasion> dataList = new ArrayList<>();

并将具有选择状态的项目放入此arraylist中,如下所示:

String[] occassion = getResources().getStringArray(R.array.occassion_array);

for(int i=0; i < occassion.lenght(); i++){

   String name = occasion[i];
   Occasion obj = new Occasion();
   obj.name = name;
   obj.status = getItemStatus(name);
   datalist.add(obj);

}

现在将此datalist传递给您的适配器,并根据场合类

的状态参数设置检查状态
private boolean getItemStatus(String name) {

String items = getSharedPreferences("pref", 0).getString("items", "");
if(items.contains(name){
    return true;
}
return false;

}

@Override

public void onItemClick(AdapterView adapterView,View view,int i,long l){

    String selectedItemName = dataList.get(i).name;
String items = getSharedPreferences("pref", 0).getString("items", "");

if(!dataList.get(i).status) {

    if(items.equals("")) {

        items = selectedItemName;

    } else {

        items = items +","+ selectedItemName;

    }

} else {

    items = items.replace(selectedItemName, "");

}

SharedPreferences.Editor editor = getSharedPreferences("pref", 0).edit();
editor.putString("items", items);
    editor.apply();

dataList.get(i).status = !dataList.get(i).status;
adapter.notifyDataSetChanged();

}

现在您只需更改适配器类。在 getView()下的该课程中,您必须检查每个项目的状态并相应地选中该复选框。

希望这会帮助你。

答案 1 :(得分:1)

检查一下。

for(int i = 0 ; i<adapterOccassion.size ;i++)
{
if(Utils.occassionArrayList.contains(adapterOccassion.getItem(i)))
   {
       // set checked 
   }
}