私はAndroidプログラミングにはかなり新しく、フラグメントの使い方を理解しようとしています。私はViewPager
を使ってフラグメント間をスクロールしています。しかし、次のフラグメントにスワイプすると、データは更新されません。私は同じ断片を何度も何度も繰り返す。次のようにAndroid:newInstanceからonCreateに余分に渡す
コードは次のとおりです。
package com.bignerdranch.android.criminalintent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import java.util.UUID;
/**
* Created by nandeeka on 6/13/16.
*/
public class CrimeFragment extends Fragment {
private Crime mCrime;
private EditText mTitleField;
private Button mDateButton;
private CheckBox mSolvedCheckBox;
public static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id";
public static final String TAG = "CrimeFragment";
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UUID crimeID = (UUID) getActivity().getIntent().getSerializableExtra(EXTRA_CRIME_ID);
Log.d(TAG, "onCreate: " + crimeID);
mCrime = CrimeLab.get(getActivity()).getCrime(crimeID);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_crime, container, false);
mTitleField = (EditText) v.findViewById(R.id.crime_title);
mTitleField.setText(mCrime.getTitle());
mTitleField.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
mCrime.setTitle(s.toString());
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
mDateButton = (Button) v.findViewById(R.id.crime_date);
mDateButton.setText(mCrime.getFormattedDate(getActivity().getApplicationContext()));
mDateButton.setEnabled(false);
mSolvedCheckBox = (CheckBox) v.findViewById(R.id.crime_solved);
mSolvedCheckBox.setChecked(mCrime.isSolved());
mSolvedCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCrime.setSolved(isChecked);
}
});
return v;
}
public static CrimeFragment newInstance(UUID crimeID) {
Bundle args = new Bundle();
args.putSerializable(EXTRA_CRIME_ID, crimeID);
Log.d(TAG, "newInstance: " + crimeID);
CrimeFragment fragment = new CrimeFragment();
fragment.setArguments(args);
return fragment;
}
}
誰かが情報をフラグメントに表示することを意味し、私は私がフラグメントへのフラグメントからスワイプとして、
crimeID
が更新されない理由を見つけ出す手助けができれば、私は思っていた
同じままです。正しい情報がnewInstance
に渡されていることを知っていますが、それはちょうどonCreate(Bundle)
で変更されていないようです。
誰かが助けてくれたら本当にありがたいです。ありがとう!
:ような何かに
:これを行うには
は、次のコードを変更しますか? – Apoorv
シリアル化されたIDです。私は、 'newInstance'に渡される情報が正しいことを忘れていたと思いますが、何らかの理由で、onCreateが呼び出されたときに変更されていないようです。 – student1868
getActivity()。getIntentの代わりに 'getArguments'を使ってみてください。 – Apoorv