Fragment与Activity传递数据
生活随笔
收集整理的這篇文章主要介紹了
Fragment与Activity传递数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MainActivity如下:
package cc.testsimplefragment0;import android.os.Bundle; import android.app.Activity; import android.app.FragmentTransaction; import cc.testsimplefragment0.TitlesListFragment.TitlesListFragmentCallBack; /** * Demo描述: * Fragment基本使用以及Fragment與Activity之間數據的傳遞 * * 參考資料: * Android瘋狂講義(第二版) * * 備注說明: * 利用接口實現Fragment與Activity的信息傳遞. * 這個思路是不錯的. * 在此總結一下Fragment與Activity之間交換數據的方式: * 1 Activity向Fragment傳遞數據 * fragment.setArguments(bundle) * 2 Fragment向Activity傳遞數據 * 在Fragment內部定義一個回調接口.讓包含該Fragment的 * Activity實現該接口.這樣Fragment就可調用該回調方法 * 將數據傳給Activity * */ public class MainActivity extends Activity implements TitlesListFragmentCallBack{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } //實現TitlesListFragmentCallBack接口中的方法 @Override public void onItemSelected(int index) { DetailFragment detailFragment=new DetailFragment(); Bundle bundle=new Bundle(); bundle.putInt(Data.ID, index); //向detailFragment傳入參數 detailFragment.setArguments(bundle); //開始Fragment的事務Transaction FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); //替換容器(container)原來的Fragment fragmentTransaction.replace(R.id.relativeLayoutContainer, detailFragment); //設置轉換效果 fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); //將事務添加到Back棧.即按下Back鍵時回到替換Fragment之前的狀態.類似于Activity的返回 fragmentTransaction.addToBackStack(null); //提交事務 fragmentTransaction.commit(); } }TitlesListFragment如下:
package cc.testsimplefragment0;import android.app.Activity; import android.app.ListFragment; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; /** * 備注說明: * 因為是繼承自ListFragment * 所以不用覆寫onCreateView()方法 * */ public class TitlesListFragment extends ListFragment { private TitlesListFragmentCallBack mTitlesListFragmentCallBack; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //設置適配器 ArrayAdapter<String> arrayAdapter= new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_checked, Data.TITLES); setListAdapter(arrayAdapter); } //當該Fragment被添加,顯示到Activity時調用該方法 //在此判斷顯示到的Activity是否已經實現了接口 @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof TitlesListFragmentCallBack)) { throw new IllegalStateException("TitlesListFragment所在的Activity必須實現TitlesListFragmentCallBack接口"); } mTitlesListFragmentCallBack=(TitlesListFragmentCallBack) activity; } //當該Fragment從它所屬的Activity中被刪除時調用該方法 @Override public void onDetach() { super.onDetach(); mTitlesListFragmentCallBack=null; } //點擊ListFragment中某個條目時調用該方法 @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); mTitlesListFragmentCallBack.onItemSelected(position); //設置ListView為單選模式 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); //顯示選中的條目 getListView().setItemChecked(position, true); } //定義一個業務接口 //該Fragment所在Activity需要實現該接口 //該Fragment將通過此接口與它所在的Activity交互 public interface TitlesListFragmentCallBack{ public void onItemSelected(int index); } }DetailFragment如下:
package cc.testsimplefragment0;import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class DetailFragment extends Fragment { private int id=0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments().containsKey(Data.ID)) { id=getArguments().getInt(Data.ID); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view=inflater.inflate(R.layout.detail_fragment, container, false); TextView titleTextView=(TextView) view.findViewById(R.id.titleTextView); titleTextView.setText(Data.TITLES[id]); TextView detailTextView=(TextView) view.findViewById(R.id.detailTextView); detailTextView.setText(Data.DETAILS[id]); return view; } }Data如下:
package cc.testsimplefragment0; public final class Data { public static final String ID="id"; //標題 public static final String[] TITLES = { "標題1","標題2", "標題3","標題4"}; //內容 public static final String[] DETAILS = { "內容1","內容2", "內容3","內容4"}; }轉載于:https://www.cnblogs.com/gao-chun/p/4848559.html
總結
以上是生活随笔為你收集整理的Fragment与Activity传递数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android中自定义RadioButt
- 下一篇: Spring Resource接口获取资