フラグメントで構成される Android アプリを開発しています。これについて言及developer.android.com
します。小型デバイスの場合、myfragment_container.xml
ファイルは対応するファイルに置き換えられfragment.xml
ます。
作成された新しいフラグメントは、いくつかの編集テキスト ボックスと日付ピッカーなどで構成されています。画面の向きの変更中に編集テキストボックスに入力されたデータを何とか保存できます。
ただし、日付ピッカーとリストのテキストは自動的にリセットされます。
また、ユーザーが再び同じフラグメントに戻った場合に、入力したすべてのデータを保持する必要があるように、フラグメントのコンテンツを保存したいと考えています。
私はアンドロイドが初めてで、かなり長い間この問題に悩まされてきました。できるだけ早くこれを手伝ってください。
参考までにコードを貼っておきます。
これは私のMainActivity.javaクラス ファイルです
ContentFragment newFragment = new ContentFragment();
Bundle args = new Bundle();
// Log.d("Inside OnCOntentSelected", String.valueOf(position));
args.putInt(ContentFragment.ARG_POSITION, position);
newFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
// Replace whatever is in the fragment_container view with this
// fragment,
// and add the transaction to the back stack so the user can
// navigate back
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
これは私のContentFragment.javaコードです
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class ContentFragment extends Fragment {
public static final String ARG_POSITION = "position";
int mCurrentPosition = -1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// If activity recreated (such as from screen rotate), restore
// the previous article selection set by onSaveInstanceState().
// This is primarily necessary when in the two-pane layout.
if (savedInstanceState != null) {
mCurrentPosition = savedInstanceState.getInt(ARG_POSITION);
}
// Inflate the layout for this fragment
return inflater
.inflate(R.layout.personal_information, container, false);
}
@Override
public void onStart() {
super.onStart();
// During startup, check if there are arguments passed to the fragment.
// onStart is a good place to do this because the layout has already
// been
// applied to the fragment at this point so we can safely call the
// method
// below that sets the article text.
// Log.d("Inside OnStart", "Inside OnStart");
// Log.d("mCurrentPosition OnStart", String.valueOf(mCurrentPosition));
Bundle args = getArguments();
if (args != null) {
// Set article based on argument passed in
updateContentView(args.getInt(ARG_POSITION));
} else if (mCurrentPosition != -1) {
// Set article based on saved instance state defined during
// onCreateView
updateContentView(mCurrentPosition);
}
}
public void updateContentView(int position) {
mCurrentPosition = position;
// if (mCurrentPosition == 0) {
Spinner spinner = (Spinner) getActivity().findViewById(
R.id.spinnerZodiac);
// Create an ArrayAdapter using the string array and a default
// spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this.getActivity(), R.array.zodiac_signs,
android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);
Spinner spinner1 = (Spinner) getActivity().findViewById(
R.id.spinnerGender);
// Create an ArrayAdapter using the string array and a default
// spinner layout
ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
this.getActivity(), R.array.gender,
android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner1.setAdapter(adapter1);
// }
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(ARG_POSITION, mCurrentPosition);
}
}