如何从 Activity 在 Singleton Arraylist 中设置数据

How to setData in Singleton Arraylist from an Activity

首先:我在 Android Studio(Java) 上,我尝试在 OnClick 之后在我的单例(数组列表)中从 Activity 设置数据。

我想在单身人士中更新的数据:姓名、街道。

其次:因为它是一个 ArrayList 我需要使用 get(position) 吗?我如何指定我想要这个 列表的字段而不是这个(例如 Street2 而不是 street1 ...)

单例:

public class PanelDataSource {
private static PanelDataSource mInstance;
private ArrayList<Panel> listPanel;

public static PanelDataSource getInstance() {
    if (mInstance == null)
        mInstance = new PanelDataSource();

    return mInstance;
}

private PanelDataSource() {
    ArrayList<Block> listBlock = BlockDataSource.getInstance().getListBlock();
    ArrayList<Block> listBlockSPB = BlockDataSource.getInstance().getListBlockSPB();
    listPanel = new ArrayList<Panel>();
    listPanel.add(new Panel("Name", "Street", "ID 123456789", listBlock,listBlockSPB));
    listPanel.add(new Panel("Name2", "Steert2", "ID 234567890", listBlock,listBlockSPB));
}

// retrieve array from anywhere
public ArrayList<Panel> getListPanel() {
    return this.listPanel;
}}

activity 是我更新我的数据(我想在 Singleton 中为 setData/Update 使用 OnClick ..

public class Activity_PanelSettingsEdit extends AppCompatActivity {

private TextView panelSettingsEditId;
private EditText panelSettingsEditName, panelSettingsEditStreet;
private String name, street, id;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_panelsettingsedit);


    panelSettingsEditId = findViewById(R.id.panelSettingsEditId);
    panelSettingsEditName = findViewById(R.id.PanelSettingsEditName);
    panelSettingsEditStreet = findViewById(R.id.panelSettingsEditStreet);

    Button buttonValidateSettingsEdit = (Button) findViewById(R.id.buttonValidateSettingsEdit);
    buttonValidateSettingsEdit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent panelSettingsEditValidateIntent = new Intent(Activity_PanelSettingsEdit.this, Activity_PanelSettings.class);
            panelSettingsEditValidateIntent.putExtra("name",name);
            panelSettingsEditValidateIntent.putExtra("street",street);
            panelSettingsEditValidateIntent.putExtra("id",id);
            v.getContext().startActivity(panelSettingsEditValidateIntent);
        }

    });
    getData();
    setData();
}

private void getData() {
    name = getIntent().getStringExtra("name");
    street = getIntent().getStringExtra("street");
    id = getIntent().getStringExtra("id");

}

private void setData() {
    panelSettingsEditId.setText(id);
    panelSettingsEditName.setText(name);
    panelSettingsEditStreet.setText(street);
}}

第一部分:

您可以在 onClick() 中访问您的 PanelDataSource 单例实例,然后可以执行如下操作。

PanelDataSource.getInstance().getListPanel().add(new Panel(name, street, id, BlockDataSource.getInstance().getListBlock(),BlockDataSource.getInstance().getListBlockSPB()));

name:面板名称

street: 面板的街道名称

id:面板标识

和两个List<Block>

第二部分:

如果您需要使用该名称访问您的面板,最好使用 HashMap 之类的方式将您的数据保存在 {key, value} 对中。 如果 Streetname 被用作保存 Panel 数据的密钥,那么您可以使用 StreetName 访问您的面板。但请确保 Streetname 是唯一的,并且任何两个 Panel 都不应共享相同的 StreetName,否则它将被最新的 Panel 覆盖。