我正在使用列表视图显示带有android.R.layout.simple_list_item_checked选中标记的杂货项目。问题是当我检查项目并转到上一页并返回列表时,我的项目不再受检查了。我想使用除sharedpreference之外的其他方法,我该怎么做?
我尝试使用SparseBooleanArray,但是没有用,我可能用错了。 由于我使用了上一个电话按钮,并且在单击了调用列表活动的按钮之后,我应该在onCreate方法中使用某些内容,但是我不确定什么以及如何做?
我也尝试使用oninstanceResore方法,就像有人建议我一样,但我不希望它变薄,我要在活动2上说即时消息,这是我的项目列表,其中某些项目已检查,我决定回去做其他事情使用手机上一个按钮,然后使用我的应用程序中的按钮返回活动2 ...我希望我的物品仍处于检查状态。有人可以帮助我,我将非常感激……
public class FruitList_Activity extends AppCompatActivity {
private ListView fruitsList;
private ArrayAdapter<String> adapterFruit;
private Button btn_Delete;
private Button btn_SelectAll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_fruit_list_);
fruitsList = findViewById(R.id.list_Fruits);
fruitsList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
btn_Delete = findViewById (R.id.btn_delete);
CreateActivity.itemsFruit = FileHelper.readData(this);
adapterFruit = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, CreateActivity.itemsFruit);
fruitsList.setAdapter(adapterFruit);
/*Remove items*/
btn_Delete.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
SparseBooleanArray checkedItemPositions = fruitsList.getCheckedItemPositions();
int itemCount = fruitsList.getCount();
for(int i=itemCount-1; i >= 0; i--){
if(checkedItemPositions.get(i)){
fruitsList.setItemChecked(i,true);
adapterFruit.remove(CreateActivity.itemsFruit.get(i));
FileHelper.writeData(CreateActivity.itemsFruit, FruitList_Activity.this );
}
}
adapterFruit.notifyDataSetChanged();
}
});
}
}
您能指导我如何做到这一点吗?我只是从Java入手,所以请向我解释,以便我理解。谢谢!
答案 0 :(得分:0)
您需要使用列表信息创建一个Bundle,并在调用第二个活动之前,将数据设置在该Bundle中,当您回到主活动时,只需检查该Bundle,如果它与其他活动不同为空是因为您需要加载数据。
我希望这个校准对您有帮助:D
这已保存Instance()
此外,当您具有onConfigurationChanged()
时,此校准将为您提供帮助答案 1 :(得分:0)
使用onSaveInstanceState保存您的adapterFruit
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("adapter",(Serializable) adapterFruit);
}
当您返回活动时,将执行onRestoreInstance
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(saveInstanceState != null){
adapterFruit = (ArrayAdapter<Adapter> )savedInstanceState.getSerializable("adapter");
}
}
希望有帮助。
答案 2 :(得分:-1)
你可以这样做
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holder.checkBox.isChecked()==true) {
holder.checkBox.setChecked(true);
model_image.get(position).setSelected(true);
}
else
{
holder.checkBox.setChecked(false);
model_image.get(position).setSelected(false);
}
}
});