我創造一些EditTexts與按鈕的onSaveInstanceState打電話,我創建了實現OnClickListener一類,我想屏幕旋轉後,那些EditTexts保存,但他們總是消失。我知道,在旋轉Android的 - 從另一個類比主
活動被破壞並重新創建
我不能保存的EditText捆綁,因爲它沒有實現Parcelable或類似的東西
於是,我就至少挽救他們的ID和文本他們有他們與onSaveInstanceState(Bundle savedInstanceState)
,但它不叫,因爲它不是在主類,但在另一個叫ViewControl。我需要保存一些私有變量(text和id),這就是爲什麼我在這個類中有這個方法的原因。我試圖從另一個onSaveInstance中調用這個方法,這個方法在main但是沒有運氣。你能告訴我一些簡單的方法來編程創建一個在另一個下面的EditTexts,並保持它們在屏幕旋轉後?我真的無法找到任何簡單的方法...
主要類
public class MainActivity extends Activity {
private ViewControl vc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vc = new ViewControl(this);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
vc.onSaveInstanceState(savedInstanceState);
}
ViewControl類
import java.util.ArrayList;
public class ViewControl extends Activity implements View.OnClickListener{
private Button btn;
private RelativeLayout rl;
private Activity act;
private ArrayList<Integer> id;
private ArrayList<String> userpath;
private int lastId;
public ViewControl(Activity activity) {
this.act = activity;
this.id = new ArrayList<Integer>();
this.userpath = new ArrayList<String>();
this.rl = (RelativeLayout)act.findViewById(R.id.layout);
this.btn = (Button)act.findViewById(R.id.btn);
this.id.add(Integer.valueOf(R.id.btn));
this.btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(id.size() != 1)
lastId = id.get(id.size() - 1);
else
lastId = R.id.btn;
RelativeLayout.LayoutParams par = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
par.addRule(RelativeLayout.BELOW, lastId);
EditText et = new EditText(act);
et.setId(++lastId);
id.add(Integer.valueOf(lastId));
et.setText(Integer.toString(lastId));
rl.addView(et, par);
lastId = et.getId();
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putIntegerArrayList("ids", id);
savedInstanceState.putStringArrayList("userpaths", userpath);
savedInstanceState.putInt("lastId", lastId);
Toast.makeText(act, "Onsave", Toast.LENGTH_LONG).show();
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
this.id = savedInstanceState.getIntegerArrayList("ids");
this.userpath = savedInstanceState.getStringArrayList("userpaths");
this.lastId = savedInstanceState.getInt("lastId");
Toast.makeText(act, "Onrestore", Toast.LENGTH_LONG).show();
for(int i = 0; i < id.size(); i++)
{
RelativeLayout.LayoutParams par = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
par.addRule(RelativeLayout.BELOW, lastId);
EditText et = new EditText(act);
et.setId(this.id.get(i));
}
}
}
在主類我有onSaveInstace ...我不叫任何超級,只是vievcontrol.onSave ...然後在ViewControls onSave我調用超值後,雖然asigning值,但它不起作用 – user3086577
@ user3086577是的,至少在上面的代碼中,檢查MainActivity.onSaveInstanceState。 –
對不起,我的意思是我編輯代碼在PC上,因爲你說,它沒有工作,但後來我意識到它的確,但它不創建EditTexts,但它確實保存值。所以現在我需要弄清楚如何做到這一點。你有沒有什麼好的建議來重新創建以編程方式創建的視圖? – user3086577