[英]How to save instance state on Custom View in Android?
我有一個擴展LinearLayout
自定義視圖:
public class CustomEditTextLogin extends LinearLayout {
public CustomEditTextLogin(Context context) {
super(context);
// TODO Auto-generated constructor stub
initialize(context);
}
public CustomEditTextLogin(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initialize(context);
}
private LinearLayout llParentCetL;
private TextView txtAlertCs;
private EditText edt;
private ImageView img;
public static final int TEXT = 0;
public static final int EMAIL = 1;
public static final int PASSWORD = 2;
public static final int USERNAME = 3;
private void initialize(Context context) {
LayoutInflater mLayoutInflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = mLayoutInflater.inflate(R.layout.custom_edit_text_login, this, true);
llParentCetL = (LinearLayout) view.findViewById(R.id.llParentCetL);
txtAlertCs = (TextView) view.findViewById(R.id.txtAlertCetL);
edt = (EditText) view.findViewById(R.id.edtCetL);
img = (ImageView) view.findViewById(R.id.imgCetL);
txtAlertCs.setVisibility(View.GONE);
int imgMargin = (int) (UIHelpers.width *0.025);
UIHelpers.setMargin(img, imgMargin, imgMargin, imgMargin, imgMargin);
img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
setFocus();
}
});
public CustomEditTextLogin setFocus(){
if(edt != null){
edt.setFocusableInTouchMode(true);
edt.requestFocus();
InputMethodManager imm = (InputMethodManager) App.context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edt, InputMethodManager.SHOW_IMPLICIT);
}
return this;
}
}
我想保存實例狀態並還原它,但這與Activity的實例狀態不同。
如何在Android的自定義視圖上保存實例狀態?
不確定我是否正確理解您。 但是看起來您想獨立於Activity實例保存View的狀態並能夠還原它。 您可以為此使用保留的片段。
重新啟動活動時,使用FragmentManager檢索片段。
public class RetainedFragment extends Fragment { // data object we want to retain private MyDataObject data; // this method is only called once for this fragment @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // retain this fragment setRetainInstance(true); } public void setData(MyDataObject data) { this.data = data; } public MyDataObject getData() { return data; }
}
要恢復保存的對象,可以使用FragmentManager。
public class MyActivity extends Activity {
private RetainedFragment dataFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// find the retained fragment on activity restarts
FragmentManager fm = getFragmentManager();
dataFragment = (DataFragment) fm.findFragmentByTag(“data”);
// create the fragment and data the first time
if (dataFragment == null) {
// add the fragment
dataFragment = new DataFragment();
fm.beginTransaction().add(dataFragment, “data”).commit();
// load the data from the web
dataFragment.setData(loadMyData());
}
// the data is available in dataFragment.getData()
...
}
@Override
public void onDestroy() {
super.onDestroy();
// store the data in the fragment
dataFragment.setData(collectMyLoadedData());
}
}
在這里您可以找到有關此的更多信息: http : //developer.android.com/guide/topics/resources/runtime-changes.html
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.