2014-01-14 3 views
-2

Мне нужно добавить кнопку, нажав на другую кнопку (Добавить новую). Мой код для кнопки добавить новую кнопкуКак добавить новые кнопки, нажав другую кнопку

addnew = (Button)findViewById(R.id.btnaddnew); 
    addnew.setOnClickListener(this); 
public void onClick(View v) { 
if(v == addnew) 
    { 
     Button myButton = new Button(this); 
     myButton.setText("New Button"); 
     myButton.setId(some_random_id); 
     LinearLayout ll = (LinearLayout)findViewById(R.id.layout1); 
     LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     ll.addView(myButton, lp); 
    } 
} 

выше код работает отлично, чтобы добавить кнопки макета, но после закрытия приложения, когда я вновь открыть его снова новую кнопку, которые были добавлены ранее не там. Может кто-нибудь помочь

После реализации sharedprefrences код для OnCreate

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ListView lvInb = (ListView) findViewById(R.id.lvInb); 
    addnew = (Button)findViewById(R.id.btnaddnew); 
    addnew.setOnClickListener(this); 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

код OnClick

public void onClick(View v) { 
if(v == addnew) 
    { 
     count = prefs.getInt("count", 0); 
     for(int i=0;i<count;i++){ 
     Button myButton = new Button(this); 
     myButton.setText("New Button"); 
     LinearLayout ll = (LinearLayout)findViewById(R.id.layout1); 
     LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     ll.addView(myButton, lp); 
     count++; 
     Editor editor = prefs.edit(); 
     editor.putInt("count", count); 
     editor.commit(); 
    } } 
+1

Вы должны прочитать об основах, потому что ваш вопрос о состоянии жизненного цикла приложения и деятельности. Вы не должны начинать кодирование без знания. – TommyNecessary

+0

проверить эту ссылку http://stackoverflow.com/questions/18757381/saving-dynamically-added-linearlayouts-without-using-savedinstancestate – Ranjit

ответ

1

Вы должны сохранить созданные кнопки где-то настойчиво. Код, который вы используете, не изменит ваш макет Layout xml, который будет загружен в onCreate() вашего Activity. Вы можете использовать SharedPreferences, чтобы сохранить количество Button с созданными, а затем добавить их с помощью кода после setContentView() в вашем onCreate()

+0

можете ли вы указать, где мне нужно добавлять общие настройки –

+0

Вы можете добавить его при создании нового чтобы сохранить эту кнопку, или вы можете добавить ее в onPause(), чтобы сохранить общее количество кнопок, которые у вас есть до того, как приложение выходит из окна. –

1

Вам нужно добавить количество кнопок, созданных в sharedpreferences и на создание, цикл для этого подсчета и создать эти кнопки.

в OnCreate прибудет sharedpref по:

prefs = PreferenceManager.getDefaultSharedPreferences(this); 

Сделать глобальный переменный счетчик:

int count=0; 

и при добавлении нового счета кнопки увеличения:

addnew = (Button)findViewById(R.id.btnaddnew); 
    addnew.setOnClickListener(this); 
public void onClick(View v) { 
if(v == addnew) 
    { 
     Button myButton = new Button(this); 
     myButton.setText("New Button"); 
     myButton.setId(some_random_id); 
     LinearLayout ll = (LinearLayout)findViewById(R.id.layout1); 
     LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     ll.addView(myButton, lp); 
     count++; 
     Editor editor = prefs.edit(); 
    editor.putInt("count", count); 
    editor.commit(); 
    } 
} 

В OnCreate:

count=prefs.getInt("count", 0); 
for(int i=;i<count;i++){ 
     Button myButton = new Button(this); 
     myButton.setText("New Button"); 
     myButton.setId(some_random_id); 
     LinearLayout ll = (LinearLayout)findViewById(R.id.layout1); 
     LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     ll.addView(myButton, lp); 
} 

Вы также можете добавить код кнопки в другую функцию и вызвать это.

Не объявляйте sharedpref в onCreate, написать в деятельности:

SharedPreferences prefs=null; 

и это в OnCreate:

prefs = PreferenceManager.getDefaultSharedPreferences(this); 
+0

вы можете указать, где мне нужно добавлять общие настройки. –

+0

проверить мои измененные ан. –

+0

Для "count = prefs.getBoolean (" count ", 0);" showin error Метод getBoolean (String, boolean) в типе SharedPreferences не применим для аргументов (String, int) –

Смежные вопросы