Android Fragment 参数传递与动态布局

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

Android Fragment 参数传递与动态布局

文章图片

Android Fragment 参数传递与动态布局

文章图片


    推荐阅读