MyTetra Share
Делитесь знаниями!
CrimeFragment.java
21.04.2017
10:46
Раздел: Android - books - AndroidProgramming2e - 10 Аргументы фрагментов
CrimeFragment.java
package com.bignerdranch.android.criminalintent; 
 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.text.Editable; 
import android.text.TextWatcher; 
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; 
 
public class CrimeFragment extends Fragment { 
 
    private static final String ARG_CRIME_ID = "crime_id"; 
 
    private Crime mCrime; 
    private EditText mTitleField; 
    private Button mDateButton; 
    private CheckBox mSolvedCheckBox; 
 
//    Аргументы фрагментов 
//    К каждому экземпляру фрагмента может быть прикреплен объект Bundle. Этот объект содержит пары «ключ-значение», которые работают так же, как дополнения интентов Activity. Каждая такая пара называется аргументом (argument). 
//    Чтобы создать аргументы фрагментов, вы сначала создаете объект Bundle, а затем используете put-методы Bundle соответствующего типа (по аналогии с методами Intent) для добавления аргументов в пакет: 
//    Bundle args = new Bundle(); 
//    args.putSerializable(EXTRA_MY_OBJECT, myObject); 
//    args.putInt(EXTRA_MY_INT, myInt); 
//    args.putCharSequence(EXTRA_MY_STRING, myString); 
 
//    Чтобы присоединить пакет аргументов к фрагменту, вызовите метод Fragment.setArguments(Bundle). Присоединение должно быть выполнено после создания фрагмента, но до его добавления в активность. 
//    Для этого программисты Android используют схему с добавлением в класс Fragment статического метода с именем newInstance(). Этот метод создает экземпляр фрагмента, упаковывает и задает его аргументы. 
//    Когда активности-хосту потребуется экземпляр этого фрагмента, она вместо прямого вызова конструктора вызывает метод newInstance(). Активность может передать newInstance(…) любые параметры, необходимые фрагменту для создания аргументов. 
//    Включите в CrimeFragment метод newInstance(UUID), который получает UUID, создает пакет аргументов, создает экземпляр фрагмента, а затем присоединяет аргументы к фрагменту. 
 
 
 
    public static CrimeFragment newInstance(UUID crimeId) { 
        Bundle args = new Bundle(); 
        args.putSerializable(ARG_CRIME_ID, crimeId); 
 
        CrimeFragment fragment = new CrimeFragment(); 
        fragment.setArguments(args); 
        return fragment; 
    } 
 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
//        Когда фрагменту требуется получить доступ к его аргументам, он вызывает метод 
//        getArguments() класса Fragment, а затем один из get-методов Bundle для конкретного типа. 
        UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID); 
        mCrime = CrimeLab.get(getActivity()).getCrime(crimeId); 
    } 
 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 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) { 
 
            } 
 
            @Override 
            public void onTextChanged(CharSequence s, int start, int before, int count) { 
                mCrime.setTitle(s.toString()); 
            } 
 
            @Override 
            public void afterTextChanged(Editable s) { 
 
            } 
        }); 
 
        mDateButton = (Button) v.findViewById(R.id.crime_date); 
        mDateButton.setText(mCrime.getDate().toString()); 
        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; 
    } 
} 

 
MyTetra Share v.0.52
Яндекс индекс цитирования