Fragment实现左右新闻列表和详情

来源:互联网 发布:单一数据粒度 编辑:程序博客网 时间:2024/06/07 06:49

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

2 0
原创粉丝点击