Fragment的使用,类似于新闻详情页面。点击左边fragment的listview,右边的fragment显示当前选中的内容。在这里实现主要使用监听。
在一些情况下,你可能需要fragment与activity共享事件。这样做的一个好方法是在fragment内部定义一个回调接口,并需要宿主activity实现它。当activity通过接口接收到回调时,可以在必要时与布局中的其它fragment共享信息。
举个例子,如果新闻应用的actvity中有两个fragment——一个显示文章列表(fragment A),另一个显示一篇文章(fragment B)——然后fragment A 必须要告诉activity列表项何时被选种,这样,activity可以通知fragment B显示这篇文章。这种情况下,在fragment A内部声明接口
首先:
public interface MyListener{
void onListener(String str);
}
然后:
fragment的宿主activity实现了OnArticleSelectedListener接口,并且重写onArticleSelected()以通知fragment B来自于fragment A的事件。为了确保宿主activity实现了这个接口,fragment A的onAttach()回调函数(当添加fragment到activity中时系统会调用它)通过作为参数传入onAttach()的activity的类型转换来实例化一个MyListener实例。
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try{
myListener= (MyListener) activity;
}catch (ClassCastException e){
throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
}
}
最后在点击listview的条目时设置监听事件:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String str= (String) arrayList.get(position);
myListener.onListener(str);
}
1、在activity中代码
package com.example.administrator.myapplication;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import fragment.MyLeftFragment;
import fragment.MyRightFragment;
public class MainActivity extends AppCompatActivity implements MyLeftFragment.MyListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onListener(String str) {
FragmentManager fragmentManager=getSupportFragmentManager();
MyRightFragment myRightFragment= (MyRightFragment) fragmentManager.findFragmentById(R.id.fragment_right);
myRightFragment.setText(str);
}
}
2、左边列表代码
public class MyLeftFragment extends Fragment implements AdapterView.OnItemClickListener {
private ListView listView;
private View view;
private ArrayList arrayList;
private MyAdapter adapter;
public MyListener myListener;
//定义接口,为了实现监听;
public interface MyListener{
void onListener(String str);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String str= (String) arrayList.get(position);
//把监听设置给点击事件
myListener.onListener(str);
}
//一定要重写这个方法,为了保证activity实现这个接口,通过作为参数onAttch()类型转换成OnListener()的一个实例
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try{
myListener= (MyListener) activity;
}catch (ClassCastException e){
throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragment_left,null);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
listView= (ListView) view.findViewById(R.id.listview);
arrayList=new ArrayList();
init();
adapter=new MyAdapter(getActivity(),arrayList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
}
private void init() {
for(int i=0;i<20;i++){
arrayList.add("我是item"+i);
}
}
}
3、右边详情代码
package fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.administrator.myapplication.R;
/**
* Created by Administrator on 2016/4/19.
*/
public class MyRightFragment extends Fragment {
View view;
TextView textView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragment_right,null);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
textView= (TextView) view.findViewById(R.id.text);
}
public void setText(String str){
textView.setText(str);
}
}
demo下载地址:http://download.csdn.net/detail/androidxiaogang/9511303