Java 如何在android中再次打开arraylist时显示预选复选框
首先,我使用复选框选择一些数组项,并在第二个活动中显示它。之后,我再次打开我的第一个活动Java 如何在android中再次打开arraylist时显示预选复选框,java,android,Java,Android,首先,我使用复选框选择一些数组项,并在第二个活动中显示它。之后,我再次打开我的第一个活动ArrayList,但我的复选框被清除 下面是我的代码 public class Occassion extends AppCompatActivity implements View.OnClickListener,AdapterView.OnItemClickListener { ListView listView_occassion; ArrayAdapter<String> adapte
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));
}
}
和我的数组列表外接程序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>
生日
婚礼
周年纪念
庆祝活动
早日康复
暖房
情人节
排灯节
友谊日
X-Mas
新年
随机的
任何帮助对我都是非常好的。创建一个类,如:
class Occasion {
public String name;
public boolean status;
}
然后创建一个arraylist:
ArrayList<Occasion> dataList = new ArrayList<>();
及
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
现在您只需更改适配器类。在该类中的getView()下,您必须检查每个项目的状态并相应地选中复选框
希望这能帮到你。检查一下
for(int i = 0 ; i<adapterOccassion.size ;i++)
{
if(Utils.occassionArrayList.contains(adapterOccassion.getItem(i)))
{
// set checked
}
}
用于(int i=0;iSir..正在执行您的答案,但当我再次转到我的阵列列表时,黑色的复选框未选中。这意味着当我选中生日和婚礼复选框时,我的文本视图给出正确的结果,再次转到我的列表阵列时,它将为空未选中生日和wddingHey我已编辑了我的答案,请执行此操作。为此,请创建array列表。当用户选中复选框时,在列表中添加项目。是。我正在创建我的arraylist“Utils.ocCasionArrayList”,并且我的所选项目也在下一个活动文本视图中添加并显示结果。但是当我再次打开我的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);
}
private boolean getItemStatus(String name) {
String items = getSharedPreferences("pref", 0).getString("items", "");
if(items.contains(name){
return true;
}
return false;
}
@Override
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();
}
for(int i = 0 ; i<adapterOccassion.size ;i++)
{
if(Utils.occassionArrayList.contains(adapterOccassion.getItem(i)))
{
// set checked
}
}