每次按下其他活动的按钮时,如何添加列表视图项?

时间:2019-02-03 17:25:04

标签: android listview

我有一个列表视图项,其中包含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));
    }

1 个答案:

答案 0 :(得分:0)

从技术上讲,如果活动被破坏,则无法将数据保留在列表中。

您可以实施这两种解决方案之一,

  
      
  1. 创建SQLite数据库或共享首选项以保存列表,以便   每次创建实例时,构造函数都会读取数据库   并将其加载到您的列表视图中。

  2.   
  3. 如果您的数据不是那么重要(即,如果您在应用关闭后不希望使用此数据),则请保持活动状态不变,并堆叠其他   最重要的活动。下面是执行此操作的伪代码。

  4.   
    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
            }
    });

}