首先,我使用复选框选择一些数组项,然后在第二个活动中显示它。之后,我再次打开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>
任何帮助对我来说都很棒。
答案 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
}
}