保存用户添加的动态按钮android

问题描述 投票:0回答:1

我是Android的初学者,保存动态按钮时遇到问题。该代码应在用户需要时动态添加一个按钮。当用户单击addService时,此代码从第二个Activity中获取(按钮的名称和在该按钮的意图中使用的值),然后在该Activity中动态添加按钮的名称和意图,用户可以单击它服务。当我们重新加载应用程序时,这些按钮将消失。如何保存用户动态添加的按钮?

源代码:

package com.example.fst.miniprojetandroidn1;


import androidx.appcompat.app.AppCompatActivity;


import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;


import java.util.ArrayList;

public class ajouter_programme extends AppCompatActivity {

    ArrayList<Button> list_programme=new ArrayList<Button>();
    Button Addbutton;
    int count = 1,c;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ajouter_programme);
        setTitle("Liste des programmes ");
        Addbutton = findViewById(R.id.plusbutton);

        Addbutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                Button myButton = new Button(ajouter_programme.this);
                c=count++;

                myButton.setId(c);
                myButton.setText("Programme " + c);
                list_programme.add(myButton);
                LinearLayout ll = (LinearLayout) findViewById(R.id.buttonlayout);
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                ll.addView(myButton, lp);
              myButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ajouterprog();
                    }
                });

            }


        });



    }
    public void ajouterprog(){
        Intent list_programmes_Intent = new Intent(ajouter_programme.this,ajouter_medicamement.class);
        startActivity(list_programmes_Intent);
    }
}

amd .xml是

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/buttonlayout"
    android:layout_width="match_parent"

    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/plusbutton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Ajouter programme"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</LinearLayout>

非常感谢您的帮助。

android button dynamic save
1个回答
0
投票

您包含Button的ArrayList为空,因为您不存储它们。可以使用SharedPreferences而不是使用该ArrayList(如果您没有其他目的)。 SharedPreferences使用键值对存储数据。 SharedPreferences有两个选项:

1。基于活动的SharedPreferences:您只能使用与使用SharedPreferences相同的Activity进行访问。您无法通过应用程序中的任何其他活动来访问它。

//Call Activity based SharedPreferences
SharedPreferences sp = getPreferences(MODE_PRIVATE);
//Calling Editor interface for transaction
SharedPreferences.Editor editor = sp.edit();
//Put primitive data types (int, String, boolean, float etc.)
editor.putInt(String key, int value);
editor.putString(String key, String value);
editor.putBoolean(String key, Boolean value);
//Apply your changes and finish editing.
editor.apply();

2。基于应用程序的SharedPreferences:您可以在应用程序中的任何活动上进行访问。

//Call Activity based SharedPreferences
SharedPreferences sp = getSharedPreferences(String name,MODE_PRIVATE);
//Calling Editor interface for transaction
SharedPreferences.Editor editor = sp.edit();
//Put primitive data types (int, String, boolean, float etc.)
editor.putInt(String key, int value);
editor.putString(String key, String value);
editor.putBoolean(String key, Boolean value);
//Apply your changes and finish editing.
editor.apply();

注意: 字符串名称是XML文件的名称,您的数据将与SharedPreferences一起存储,您可以根据需要对其进行命名。同样,对于SharedPreferences,您只能存储原始数据类型(如果不使用GSON)。存储有关按钮的信息,并在每次启动或恢复活动时重新创建。

从共享首选项中获取数据:

//Activity based SharedPreferences
SharedPreferences sp = getPreferences(MODE_PRIVATE);
//For getting int
int value = sp.getInt(String key, defautValue);
//For getting String
String value = sp.getString(String key, defaultValue);
//For getting Boolean
Boolean value = sp.getBoolean(String key, defaultValue);
每次启动或恢复活动时,

注意: int count将返回相同的值(在本例中为1)。您需要修复它,例如:

SharedPreferences sp = getPreferences(MODE_PRIVATE);
int count = sp.getInt("count", 1);

例如,一种信息存储方法:

private void saveButton(int count) {
    //Call Activity (or Application) based SharedPreferences
    SharedPreferences sp = getPreferences(MODE_PRIVATE);
    //Calling Editor interface for transaction
    SharedPreferences.Editor editor = sp.edit();
    //Put primitive data types (for this case its integer)
    //Number of buttons
    editor.putInt("count", (count + 1));
    //Ids of each Button
    editor.putInt("btn_id" + count, count);
    //Apply your changes and finish editing.
    editor.apply();
}

您可以在用于创建新Button的Button的click方法中使用此方法。每次单击该按钮以创建新按钮时,该方法有助于保存有关您的按钮的信息。

要重新加载Button,您可以使用类似的方法:

private void loadButtons() {
    //Find your layout which buttons will be added.
    LinearLayout ll = (LinearLayout) findViewById(R.id.buttonlayout);
    //Call Activity (or Application) based SharedPreferences
    SharedPreferences sp = getPreferences(MODE_PRIVATE);
    //Get number of buttons you've saved.
    int count = sp.getInt("count", 1);
    for (int i = 1; i < count; i++) {
        //Get back required datas for creating for your Buttons again
        int id = sp.getInt("btn_id" + i, 1);
        //Create new button
        Button btn = new Button(this);
        btn.setText("Programme" + i);
        btn.setId(id);
        //Add button to your layout
        ll.addView(btn);
        //Set ClickListener for every Button
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ajouterprog();
            }
        });
    }

您需要在onCreate()或onResume()方法中调用此方法。

© www.soinside.com 2019 - 2024. All rights reserved.