我有一个列表视图项,其中包含2个对象:1个Textview(String)和1个“切换”按钮(布尔)。我正在使用自定义适配器和自定义ArrayList来显示这些项目,并且我想在每次按下来自不同活动的按钮时添加一个项目。问题是,当我按下按钮以添加新的列表视图项时,它将用新的列表项替换旧的列表项,而不是添加新的行。我试图使用myadapter.notifydatasetchanged()来更新列表视图,但是没有用,因为当活动改变时,忘记了数组的大小,就像从头开始添加新行一样。
//Constructor
MyAdapter(Context context, List<Model> ModelArrayLista)
{
super(context,0,ModelArrayLista);
this.contexts = context;
this.ModelArrayList = ModelArrayLista;
}
@Override
public int getCount() {
return ModelArrayList.size();
}
public void remove(int position)
{
ModelArrayList.remove(position);
this.notifyDataSetChanged();
}
public View getView(int position, View convertView, @NonNull ViewGroup parent)
{
View listItem = convertView;
if(listItem == null)
{
listItem = LayoutInflater.from(contexts).inflate(R.layout.listview_item, parent, false);
}
Model currentModel = ModelArrayList.get(position);
TextView mtime = listItem.findViewById(R.id.textView1);
mtime.setText(currentModel.getTime());
final Switch mswitch = listItem.findViewById(R.id.switch1);
mswitch.setChecked(currentModel.getSwitch_btn());
final Intent disabled_intent = new Intent(contexts, Clock_Activity.class);
final Intent enable_intent = new Intent(contexts,Clock_Activity.class);
// Switch button - Turn on/Turn off
mswitch.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(mswitch.isChecked())
{
enable_intent.putExtra("enable",en);
contexts.startActivity(enable_intent);
}
else
{
disabled_intent.putExtra("disable", dis);
contexts.startActivity(disabled_intent);
}
}
});
return listItem;
}
public class Model extends ArrayList<Model> {
private String time;
private boolean switch_btn;
public Model(String wra,Boolean switcher)
{
this.time = wra;
this.switch_btn = switcher;
}
public String getTime()
{
return time;
}
public boolean getSwitch_btn()
{
return switch_btn;
}
}
//OnCreate
Initialisations();
//get a String value that control our adapter
Intent intent = getIntent();
Bundle b = intent.getExtras();
if(b!= null)
{
get_time = b.getString("time");
}
int num = intent.getIntExtra("number", 0);
list = new ArrayList<>();
//call our custom adaptersS
myAdapter = new MyAdapter(this,list);
listView.setAdapter(myAdapter);
//get a boolean value that controls our adapter
showthelist = intent.getBooleanExtra("keyList",false);
if(showthelist)
{
list.add(new Model(get_time,true));
myAdapter.notifyDataSetChanged();
}
if(num == 1)
{
list.set(0,new Model(get_time,false));
}
答案 0 :(得分:0)
从技术上讲,如果活动被破坏,则无法将数据保留在列表中。
您可以实施这两种解决方案之一,
创建SQLite数据库或共享首选项以保存列表,以便 每次创建实例时,构造函数都会读取数据库 并将其加载到您的列表视图中。
如果您的数据不是那么重要(即,如果您在应用关闭后不希望使用此数据),则请保持活动状态不变,并堆叠其他 最重要的活动。下面是执行此操作的伪代码。
ActivityIntact{
//on some button click
startActivity(NewActivity);
}
NewActivity{
//Add a close button or just finish this activity anyhow you want
closeButton.setOnclickListener(new View.onClickListener(){
@Override
public void onClick(View view){
NewActivity.this.finish(); //This is important to destroy this activity
}
});
}