现在的位置: 首页 > 综合 > 正文

Fragment & Fragment间的通信实现

2018年09月19日 ⁄ 综合 ⁄ 共 2481字 ⁄ 字号 评论关闭

Fragment是一个和Activity息息相关的控件。一个Fragment必须总是嵌在一个Activity里,Activity的生命周期会直接影响到它,比如当Activity Paused的时候,Fragment也是Paused. 但是当Activity resume的时候,Fragment可以独立的进行任何包括添加,删除等的操作。

Fragment的生命周期和Activity十分类似,下面这个图是从Google文档上复制下来的Activity和Fragment的生命周期对比。当创建一个Fragment的时候,有以下三个方法是必须要实现的onCreate(),onCreateView(),onPause()。

在网上看到好多类似于PAD的UI实现,就是左边是一个list,右边显示相关内容。用的是ListFragment。我只想知道两个单纯的Fragment是怎么通信的?我写了一个最最简单的DEMO,就是一个Activity,里面有两个单独的fragment。当点击左边fragment的button时候,右边fragment显示一个单词。非常汗的是,这个我琢磨了老久,菜鸟啊。从头做起吧。Fragment间是不能直接进行通信的,必须通过跟Activity的间接通信来实现。

 

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Book extends Activity implements OnArticleSelectedListener{


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.book);
    }


    @Override
    public void onArticleSelected(int id) {

        switch (id) {
            case R.id.button1 :
                showDetail();
                break;
                .....
            default:
                break;

        }
    }

    private void showDetail() {
        DetailFragment df = (DetailFragment)getFragmentManager().
                findFragmentById(R.id.detail_fragment);
        df.updateDetail();
    }

    public static class ArticleFragment extends Fragment {

        OnArticleSelectedListener mListener;

        // Container Activity must implement this interface
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            try {
                mListener = (OnArticleSelectedListener)activity;
            } catch (ClassCastException e) {

            }
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.article_view, container, false);
            v.findViewById(R.id.button1).setOnClickListener(
                    new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListener.onArticleSelected(R.id.button1);
                }
            });
            return v;
        }
    }

    public static class DetailFragment extends Fragment {
        public View mView;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            mView = inflater.inflate(R.layout.detail_view, container, false);
            return mView;
        }

        public void updateDetail() {
            TextView textView;
            textView = (TextView)mView.findViewById(R.id.text_1);
            textView.setText("Emily");
        }
    }
}

 

public interface OnArticleSelectedListener {
    public void onArticleSelected(int id);
}

最终出来是这个样子:

 

 

 

Google文档上的相关内容。

http://developer.android.com/guide/components/fragments.html

http://developer.android.com/training/basics/fragments/index.html

 

 

【上篇】
【下篇】

抱歉!评论已关闭.