动态创建的按钮有重新启动应用程序后相同的标签?(Dynamically created button

2019-10-19 08:05发布

我使用的是predefined button ,生成new buttons点击它的时候。 产生新的按钮后,我想change their label对我使用EditText在对话框中定义其弹出onLongClick新产生的按钮。 存储所有生成的按钮和他们的标签我使用Shared preferences 。 但问题是,重新启动后,所有生成的按钮对他们相同的标签。

code in mainactivity-----
SharedPreferences prefs=null;
String key;
int btncount = 15;

code in onCreate method----
prefs = PreferenceManager.getDefaultSharedPreferences(this);
btncount=prefs.getInt("count", 0);
LinearLayout ll = (LinearLayout)findViewById(R.id.layout1);
for(int i=0;i<btncount;i++)
    {
        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);       
        final Button myButton = new Button(this);
        myButton.getId();
        myButton.setText(prefs.getString(key+myButton.getId(),"New"));
        myButton.setOnLongClickListener(new OnLongClickListener() {
            public boolean onLongClick(View arg0)
                {
                    AlertDialog lbldialog = new AlertDialog.Builder(context).create();
                    final EditText input = new EditText(MainActivity.this);                 
                    lbldialog.setView(input);
                    lbldialog.setButton(DialogInterface.BUTTON_POSITIVE, "Change", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) 
                                {
                                myButton.setText(input.getText());
                                    Editor edit = prefs.edit();
                                    edit.putString(key+myButton.getId(), myButton.getText().toString());
                                    edit.commit();
                                }
                        });

                lbldialog.show();   
        return true;  
        }
});
ll.addView(myButton, lp);}

Code to create button-----
if(v == btnaddnew)                      
{
        final Button btn1 = new Button(this);
        btn1.setText("New");
        btn1.setId(btncount);
        btn1.setOnClickListener(new OnClickListener () {
        @Override
        public void onClick(View v){
            reportDialog(btn1.getText().toString());
            }
        });

        btn1.setOnLongClickListener(new OnLongClickListener() {
            public boolean onLongClick(View arg0) {
                AlertDialog lbldialog = new AlertDialog.Builder(context).create();
                final EditText input = new EditText(MainActivity.this);
                lbldialog.setView(input);
                lbldialog.setButton(DialogInterface.BUTTON_POSITIVE, "Change",
                        new DialogInterface.OnClickListener() 
                {
                    public void onClick(DialogInterface dialog, int which) 
                        {
                            btn1.setText(input.getText());
                            Editor edit = prefs.edit();
                            edit.putString(key+btn1.getId(), btn1.getText().toString());
                            edit.commit();

                        }
                });

            lbldialog.show();   
        return true;  
            }
        });         
        LinearLayout ll = (LinearLayout)findViewById(R.id.layout1);
        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);       
        ll.addView(btn1, lp);
        btncount++;
        Editor editor = prefs.edit();
        editor.putInt("count", btncount);
        editor.commit();
    }

检查一次,请为我提供适当的修改,因为我是新来的Android和我没有那么多的知识

Answer 1:

我看到你的代码的一个问题,

你写娄代码:

LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);       
final Button myButton = new Button(this);
myButton.setText(prefs.getString(key+myButton.getId(),"New"));

您创建一个新的按钮,以便该按钮没有任何标识,所以你怎么想getId()的是什么? 这条线检索nullnull 。 因为getid()为空并且key是空过。 您需要更改代码。

您尝试在SP与按钮的设置按键key+btn1.getId()即关键是null的,为什么你不使用btn1.getId()作为关键SP

和检索您的标签只是用i在发言。



文章来源: Dynamically created buttons have same label after restarting application?