Android Fragment 参数传递与动态布局

 1 package org.metrox.drawlayoutdemo;
 2
 3 import android.os.Bundle;
 4 import android.support.v4.app.FragmentManager;
 5 import android.support.v4.widget.DrawerLayout;
 6 import android.support.v7.app.AppCompatActivity;
 7 import android.view.View;
 8 import android.widget.AdapterView;
 9 import android.widget.ArrayAdapter;
10 import android.widget.ListView;
11
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
15
16 public class MainActivity extends AppCompatActivity {
17
18     private String[] mPlanetTitles;
19     private DrawerLayout mDrawerLayout;
20     private ListView mDrawerList;
21     private CharSequence mTitle;
22     private List<String> BackStackTitles;
23     FragmentManager fragmentManager;
24     @Override
25     protected void onCreate(Bundle savedInstanceState) {
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.drawlayout);
28         BackStackTitles = new ArrayList<String>();
29         BackStackTitles.add(getSupportActionBar().getTitle().toString());
30         //得到标题集合
31         mPlanetTitles = getResources().getStringArray(R.array.planets_array);
32         //得到侧滑菜单布局
33         mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
34         //得到列表项布局
35         mDrawerList = (ListView) findViewById(R.id.left_drawer);
36
37         //添加列表数据适配器
38         mDrawerList.setAdapter(new ArrayAdapter<String>(this,
39                 android.R.layout.simple_list_item_1, mPlanetTitles));
40         //添加列表项单击事件监听
41         mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
42
43     }
44
45     /*
46     *   列表项事件监听
47     */
48     private class DrawerItemClickListener implements ListView.OnItemClickListener {
49         @Override
50         public void onItemClick(AdapterView parent, View view, int position, long id) {
51             selectItem(position);
52         }
53     }
54
55     /*自定义点击事件*/
56     private void selectItem(int position) {
57         //保存标题
58         mTitle =  mPlanetTitles[position] ;
59         //生成Fragment并替换已存在的Fragment
60         CustomeFragment frg = new CustomeFragment();
61         List<String> fields =  new ArrayList<String>();
62         Collections.addAll(fields,getResources().getStringArray(R.array.class_array));
63         fragmentManager = getSupportFragmentManager();
64         fragmentManager.beginTransaction()
65                 .addToBackStack(mTitle.toString())
66                 .replace(R.id.content_frame, CustomeFragment.newInstance(fields))
67                 .commit();
68
69         BackStackTitles.add(mTitle.toString());
70         //高亮显示选中项
71         mDrawerList.setItemChecked(position, true);
72         //改变标题
73         setTitle(mTitle.toString());
74         //关闭侧滑菜单
75         mDrawerLayout.closeDrawer(mDrawerList);
76     }
77
78     /*修改标题*/
79     @Override
80     public void setTitle(CharSequence title) {
81         mTitle = title;
82         //得到标题栏,并修改标题
83         getSupportActionBar().setTitle(mTitle);
84     }
85
86     //处理后退键事件
87     @Override
88     public void onBackPressed() {
89         super.onBackPressed();
90         //得到暂时存放FRAGMENT的回退栈的数量
91         int count = getSupportFragmentManager().getBackStackEntryCount();
92         //因为栈是先进后出的原理,所以当前数量就是现在后退的那个FRAGMENT
93         setTitle(BackStackTitles.get(count));
94     }
95 }
 1 package org.metrox.drawlayoutdemo;
 2
 3 import android.graphics.Color;
 4 import android.os.Bundle;
 5 import android.support.annotation.Nullable;
 6 import android.support.v4.app.Fragment;
 7 import android.view.LayoutInflater;
 8 import android.view.View;
 9 import android.view.ViewGroup;
10 import android.widget.ArrayAdapter;
11 import android.widget.Button;
12 import android.widget.ListView;
13 import android.widget.Toast;
14
15 import java.util.ArrayList;
16 import java.util.List;
17 public class CustomeFragment extends Fragment {
18
19     ArrayAdapter adapter;
20     //实例化带参数Fragment
21     public static CustomeFragment newInstance(List<String> fields) {
22         CustomeFragment fragment = new CustomeFragment();
23         Bundle args = new Bundle();
24         args.putStringArrayList("fields", (ArrayList<String>) fields);
25         fragment.setArguments(args);
26         return fragment;
27     }
28
29     @Override
30     public void onCreate(@Nullable Bundle savedInstanceState) {
31         super.onCreate(savedInstanceState);
32         if(getArguments() != null){
33             List<String> fields = getArguments().getStringArrayList("fields");
34             adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,fields);
35
36         }
37     }
38
39     @Nullable
40     @Override
41     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
42         //inflate第二个参数为容器,如果布局文件中已有FrameLayout,此处应为null
43         //不然会报RemoveView错误
44         View v =   inflater.inflate(R.layout.basefragment,null);
45         ListView  lv = (ListView) v.findViewById(R.id.lv);
46         lv.setAdapter(adapter);
47         return v;
48     }
49
50
51     private  List<View> initControls(String title) {
52         List<View> views = new ArrayList<View>();
53         Button btn = new Button(getActivity());
54         btn.setText(title);
55         btn.setTextColor(Color.RED);
56         btn.setBackgroundColor(Color.YELLOW);
57         btn.setOnClickListener(new View.OnClickListener() {
58             @Override
59             public void onClick(View v) {
60                 Toast.makeText(v.getContext(),
61                         ((Button)v).getText(), Toast.LENGTH_SHORT).show();
62             }
63         });
64         views.add(btn);
65         return views;
66     }
67
68
69     @Override
70     public void onDestroy() {
71         super.onDestroy();
72     }
73
74     @Override
75     public void onDestroyView() {
76         super.onDestroyView();
77     }
78
79 }

时间: 2024-10-15 19:07:52

Android Fragment 参数传递与动态布局的相关文章

Android 中使用代码动态布局

Android 中使用代码动态布局 本文介绍在android中使用代码动态布局,有时候根据不同的需求,比如需要根据服务器上的条目个数来决定app中页面布局控件(显示个数,图标等).此处介绍通过java代码进行动态布局. 一.效果图: 图片随便找的,将就将就吧 二.给出xml文件布局 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schema

Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误

嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment.使用时, 主要要依靠宿主Fragment的 getChildFragmentManager() 来获取FragmentManger.虽然看起来和在activity中添加fragment差不多, 但因为fragment生命周期及管理恢复模式不同, 其中有一些需要特别注意的地方.本文内容还包括了从Fragment迁移到v4.Fragment代码中需要改

Android自定义动态布局 — 多图片上传

Android自定义动态布局 - 多图片上传 本文介绍Android中动态布局添加图片,多图片上传. 项目中效果图:    技术点: 1.动态添加格局中的线条和添加图片的+号 2.多张图片异步上传 首先来看一下布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layo

Android开发-动态布局小记

android动态布局相比静态布局,动态布局不用再将xml转变了布局代码,提高了一定的效率,当然可以忽略不记.动态布局主要是比较灵活,可以很快的在代码中直接修改布局,并直接使用控件进行业务逻辑开发.但代码量通常比较大,维护没有静态布局方便.不过,作为一个android开发人员,掌握一定的动态布局技巧,有时在工作中也是可以提高一定的代码开发效率.   在动态布局中,要想实现一个布局,一般是先创建五大布局的对象.然后对这些对象进行属性设置,之后再向里面添加子布局或控件. 以RelativeLayou

Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性添加图标

注:(图中每一个条目和图标都是由代码动态生成) 代码动态布局,并需要为每一个条目设置图标,此时用到了 android:drawableLeft="@drawable/icon"  父xml文件: [html] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.andr

【边做项目边学Android】知识点:动态设置布局LayoutInflater

一.作用: LayoutInflater作用是将layout的xml布局文件实例化为View类对象,LayoutInflater 的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等). 二.获得 LayoutInflater 实例的三种方式 1.LayoutInflater inflater =

Android基础:代码中实现界面动态布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView

Android Fragment使用(一) 基础篇 温故知新

Fragment使用的基本知识点总结, 包括Fragment的添加, 参数传递和通信, 生命周期和各种操作. Fragment使用基础 Fragment添加 方法一: 布局里的标签 标识符: tag, id, 如果都没有, container的id将会被使用. 方法二: 动态添加 动态添加利用了一个transaction: FragmentManager fragmentManager = getFragmentManager(); Fragment fragment = fragmentMan

Android Fragment 真正的完全解析(上)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务:以及Fragment的一些特