2016-06-30 4 views
0

私は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)で変更されていないようです。

誰かが助けてくれたら本当にありがたいです。ありがとう!

+0

:ような何かに

UUID crimeID = (UUID) getActivity().getIntent().getSerializableExtra(EXTRA_CRIME_ID); 

:これを行うには

は、次のコードを変更しますか? – Apoorv

+0

シリアル化されたIDです。私は、 'newInstance'に渡される情報が正しいことを忘れていたと思いますが、何らかの理由で、onCreateが呼び出されたときに変更されていないようです。 – student1868

+2

getActivity()。getIntentの代わりに 'getArguments'を使ってみてください。 – Apoorv

答えて

1

あなただけの活動に取り組んで意図からデータを取得しようとしています。 @Apporvのように、あなたのUUIDをgetArgumentsで取得してみてください。あなたがスワイプでnewInstance` `でどんな値を渡している

// Get passing data from bundle 
Bundle bundle = this.getArguments(); 
if (bundle != null) { 
    UUID crimeID = (UUID) bundle.getSerializableExtra(EXTRA_CRIME_ID); 
    // Do something with your CrimeID 
    } else { 
    Log.d(TAG, "UUID Data not found!"); 
} 
+0

それは働いた!ありがとうございました! – student1868

関連する問題