Android  Fragment的回退栈示例详细介绍

Android  Fragment的回退栈

点开之后按一次回退键只返回一次

MainActivity 类

public class MainActivity extends AppCompatActivity {

  ListView lv;
  List<Article> mList = new ArrayList<>();
  ContentFragment fragment;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lv = (ListView) findViewById(R.id.lv);
    //找到xml中静态创建的fragment
//    fragment = (ContentFragment) getSupportFragmentManager().findFragmentByTag("fragment");
//    //获取到引用
//   fragment.showToask("这是activity中调用fragment中的方法");
    initData();
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Article a = mList.get(position);
        ContentFragment fragment = new ContentFragment();
        //Activity向新建的fragment传参
        Bundle bundle = new Bundle();
        bundle.putSerializable("article",a);
        fragment.setArguments(bundle);
        //去显示
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fl_content,fragment);
        //添加回退栈
        ft.addToBackStack(null);
        ft.commit();
      }
    });
  }
  public void showToask(String msg){
    Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
  }

  private void initData() {
    mList.add(new Article("习近平会见菲总统:把分歧管控好 把合作谈起来", "习近平指出,中菲是隔海相望的近邻,两国人民是血缘相亲的兄弟。中菲同为发展中国家,团结、互助、合作、发展是我们的共同目标。虽然我们之间经历风 雨,但睦邻友好的情感基础和合作意愿没有变。中方高度重视中菲关系,愿同菲方一道努力,不断增进政治互信、深化互利合作、妥善处理分歧,做感情上相近相 通、合作中互帮互助、发展中携手前行的睦邻友好伙伴。"));
    mList.add(new Article("外交部官员", "。中菲同为发展中国家,团结、互助、合作、发展是我们的共同目标。虽然我们之间经历风 雨,但睦邻友好的情感基础和合作意愿没有变。中方高度重视中菲关系,愿同菲方一道努力,不断增进政治互信、深化互利合作、妥善处理分歧,做感情上相近相 通、合作中互帮互助、发展中携手前行的睦邻友好伙伴。"));
    mList.add(new Article("洪秀柱邀国民党4巨头谈党产议题 马英九将出席:把分歧管控好 把合作谈起来", "邻,两国人民是血缘相亲的兄弟。中菲同为发展中国家,团结、互助、合作、发展是我们的共同目标。虽然我们之间经历风 雨,但睦邻友好的情感基础和合作意愿没有变。中方高度重视中菲关系,愿同菲方一道努力,不断增进政治互信、深化互利合作、妥善处理分歧,做感情上相近相 通、合作中互帮互助、发展中携手前行的睦邻友好伙伴。"));
  }

  class Article implements Serializable{
    String title;
    String content;

    public Article( String title,String content) {

      this.title = title;
      this.content = content;
    }
  }

  private BaseAdapter adapter = new BaseAdapter() {
    @Override
    public int getCount() {
      return mList.size();
    }

    @Override
    public Article getItem(int position) {
      return mList.get(position);
    }

    @Override
    public long getItemId(int position) {
      return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      if (convertView == null)
        convertView = new TextView(MainActivity.this);

      TextView tv = (TextView) convertView;
      tv.setText(mList.get(position).title);
      return convertView;
    }
  };
}

ContentFragment 类

public class ContentFragment extends Fragment {

  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return View.inflate(getActivity(), android.R.layout.simple_list_item_2, null);
  }

  @Override
  public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    TextView text1 = (TextView) view.findViewById(android.R.id.text1);
    TextView text2 = (TextView) view.findViewById(android.R.id.text2);
    Bundle bundle = getArguments();
    if (bundle == null) {
      text1.setText("测试");
      text2.setText("测试内容");
    } else {
      MainActivity.Article article = (MainActivity.Article) bundle.get("article");

      text1.setText(article.title);
      text2.setText(article.content);
    }

    //开始调用
    MainActivity activity = (MainActivity) getActivity();
    activity.showToask("这是fragment中调用activity中的方法");
  }

  public void showToask(String msg){
    Toast.makeText(getActivity(),msg,Toast.LENGTH_SHORT).show();
  }
}

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
  android:layout_width="match_parent" android:layout_height="match_parent"
  android:orientation="horizontal"
  tools:context="com.example.backstack10_20.MainActivity">

  <!--<fragment-->
    <!--android:layout_width="wrap_content"-->
    <!--android:layout_height="match_parent"-->
    <!--android:layout_weight="1"-->
    <!--android:tag="fragment"-->
    <!--android:name="com.example.backstack10_20.ContentFragment"-->
    <!--/>-->
  <ListView
    android:layout_width="0dp"
    android:layout_weight="1"
    android:id="@+id/lv"
    android:layout_height="wrap_content"/>
  <FrameLayout
    android:layout_width="0dp"
    android:layout_weight="2"
    android:layout_height="wrap_content"
    android:id="@+id/fl_content"/>
</LinearLayout>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android基础之使用Fragment控制切换多个页面

    今天讲解一下Fragment的控制,主要是切换View和页面替换等操作.还有就是如何获取Fragment的管理对象,以及与Activity的通信方式.1.管理Fragment要在activity中管理fragment,需要使用FragmentManager. 通过调用activity的getFragmentManager()取得它的实例. •可以通过FragmentManager做一些事情, 包括: 使用findFragmentById()(用于在activity layout中提供一个UI的f

  • Android Fragment 基本了解(图文介绍)

    Fragment Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块. 可以把Fragment设计成可以在多个Activity中复用的模块. 当开发的应用程序同时适用于平板电脑和手机时,可以利用Fragment实现灵活的布局,改善用户体验. 如图:  Fragment的生命

  • Android 管理Activity中的fragments

    FragmentManager 为了管理Activity中的fragments,需要使用FragmentManager. 为了得到它,需要调用Activity中的getFragmentManager()方法. 因为FragmentManager的API是在Android 3.0,也即API level 11开始引入的,所以对于之前的版本,需要使用support library中的FragmentActivity,并且使用getSupportFragmentManager()方法. 用Fragme

  • android开发教程之实现滑动关闭fragment示例

    主要代码:(有注释) 复制代码 代码如下: package com.example.checkboxtest; import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.os.Handler;import android.os.Message;import andr

  • Android程序开发之Fragment实现底部导航栏实例代码

    流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏. 说明 IDE:AS,Android studio; 模拟器:genymotion; 实现的效果,见下图. 具体实现 为了讲明白这个实现过程,我们贴出来的代码多一写,这样更方便理解 [最后还会放出完整的代码实现] .看上图的界面做的比较粗糙,但实现过程的骨架都具有了,想要更完美的设计,之后自行完善吧 ^0^. 布局 通过观察上述效果图,发现任意一个选项页面都有三部分组成: 顶部去除ActionBar后的标题栏: 中间一个Fragment

  • Android App中使用ViewPager+Fragment实现滑动切换效果

    在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android-support-v4.jar.细节无法控制.不过现在情况已经不一样了,android-support-v4中提供了很多实用的功能,以至于现在新建一个android工程默认都会导入这个jar包.那我们就也采用viewpager来做滑动吧.另外一个概念就是Fragment和FragmentActivit

  • Android的Fragment的生命周期各状态和回调函数使用

    回调函数 就像activities一样,fragments也有它们自己的生命周期.理解fragments的生命周期,可以使你在它们被销毁的时候保存它们的实例,这样在它们重新被创建的时候,就能恢复它们之前的状态. 流程: onAttach() 作用:fragment已经关联到activity, 这个是 回调函数 @Override public void onAttach(Activity activity) { super.onAttach(activity); Log.i("onAttach_

  • Android App中ViewPager与Fragment结合的一些问题解决

    在了解ViewPager的工作原理之前,先回顾ListView的工作原理: ListView只有在需要显示某些列表项时,它才会去申请可用的视图对象:如果为所有的列表项数据创建视图对象,会浪费内存: ListView找谁去申请视图对象呢? 答案是adapter.adapter是一个控制器对象,负责从模型层获取数据,创建并填充必要的视图对象,将准备好的视图对象返回给ListView: 首先,通过调用adapter的getCount()方法,ListView询问数组列表中包含多少个对象(为避免出现数组

  • Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果

    BottomBar BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退.于是就用这种方式实现了,效果还不错.github有详细说明,多余的就不说了. 这个roughike是这个项目的所有者(大神致敬). 我用的是Android studio开发,fragment全部导的V4的包(以为最开始就支持的是v4的,后面也支持了app.fragment). 首先是dependen

  • FrameLayout和Fragment处理Android应用UI布局实例

    将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment : 1.由于用到getSupportFragmentManager()之类,所以主Activity的extends需为FragmentActivity: public class MainActivity extends FragmentActivity{ .......... } 2.主Activity的layout(xml文件)中建立多个Frame并定义其And

  • 详解Android应用中DialogFragment的基本用法

    DialogFragment的基本用法 1. 创建DialogFragment public class DialogA extends DialogFragment implements DialogInterface.OnClickListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder

随机推荐