2014-02-12 1 views
1

Я использую 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(); 
    } 

Проверьте это один раз и предоставьте мне с соответствующими правок, как я новичок в андроид, и я не имею, что много знаний

+0

Вы всегда создаете свою кнопку с помощью метки 'new', вы должны сначала проверить свой' SP', а если он пуст, тогда создайте с помощью 'new' else вам нужно установить метку в значение, которое хранится в' SP' –

+0

@Shayan pourvatan first I «Я создаю новые кнопки с надписью« new »после этого, я меняю ярлык на test1, test2, test3 ...... но после перезагрузки всех кнопок есть метка как test3 –

+0

Дублирующий вопрос [http://stackoverflow.com/questions/21577082/buttons-generated-on-runtime-have-same-label-after-restarting-app] и [http://stackoverflow.com/questions/21620270/shared-preferences-returning-last-value-after -restarting] тоже то же самое – Uttam

ответ

0

я вижу одну проблему в коде,

вы пишете ниже код:

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() - null и key - null тоже. вам нужно изменить этот код.

вы пытаетесь установить ключ вашей кнопки в СП с key+btn1.getId(), что ключом является null, почему вы не используете btn1.getId() в качестве ключа в SP?

и для получения вашей этикетки просто используйте i для инструкции.