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

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

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值