Android Fragment 参数传递与动态布局

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

技术分享

技术分享

以上是关于Android Fragment 参数传递与动态布局的主要内容,如果未能解决你的问题,请参考以下文章

android之间的各项信息传输类型

Android - fragment之间数据传递

将参数从 Android FragmentActivity 传递给 Fragment

android activity中的变量怎么传值给fragment

Android——软键盘操作+fragment之间传递参数

Android Fragment使用 基础篇 温故知新