标签:
为了重用Fragment UI组件,我们应该把每一个fragment都构建成完全的自包含的、模块化的组件,定义他们自己的布局与行为。定义好这些模块化的Fragment后,就可以让他们关联activity,使他们与application的逻辑结合起来,实现全局的复合的UI。
通常fragment之间可能会需要交互,比如基于用户事件改变fragment的内容。所有fragment之间的交互需要通过他们关联的activity,两个fragment之间不应该直接交互。
下面是一个fragment与activity交互的例子:
解释:这个Fragment主要是写了一个ListView,然后添加点击事件,我们可以获得被点击项的position,我们把这个position传给容纳Fragment的Activity.
public class FragList extends Fragment{ private View view; private ListView listView; private ArrayAdapter<String> adapter; private onParentListener listener; //接口的实例化 必须 @Override public void onAttach(Activity activity) { listener = (onParentListener) activity; super.onAttach(activity); } @Override @Nullable public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.from(getActivity()).inflate(R.layout.frag_list, null); initView(); return view; } void initView(){ listView = (ListView) view.findViewById(R.id.fralist); adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,addDatas()); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { listener.getPosition(position); } }); } //显示activity传过来的position public void getParentContent(int position){ Toast.makeText(getActivity(), String.valueOf(position), 0).show(); } //源数据 private List addDatas(){ List<String> list = new ArrayList<String>(); for(int i = 0;i<10;i++){ list.add("item" + i); } return list; } //定义接口 public interface onParentListener{ void getPosition(int position); } }
为了接收回调事件,宿主activity必须实现在Fragment中定义的接口。
举个例子,下面的activity实现了上面例子中的接口。
Activity:继承Fragment里面的接口,并重写方法,通过此接口我们变可以获取点击的position
public class FragmentListActivity extends FragmentActivity implements onParentListener{ //显示Fragment传过来的position private TextView textView; //接受Fragment传过来的position private int t; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment_list); initView(); addFragment(); } void initView(){ textView =(TextView) findViewById(R.id.text); }; //此为与Fragment的交互,调用Fragment的方法,并显示传入的t void toFragment(){ findViewById(R.id.fragBtn).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { FragList fragList = (FragList) getSupportFragmentManager().findFragmentById(R.id.frag); if(fragList != null){ fragList.getParentContent(t); } } }); } //得到Fragment void addFragment(){ getSupportFragmentManager().beginTransaction() .replace(R.id.frag, new FragList()).commit(); } @Override public void getPosition(int position) { t = position; textView.setText(String.valueOf(position)); } }
标签:
原文地址:http://www.cnblogs.com/wei1228565493/p/4768174.html