Android Fragment 参数传递与动态布局
2016-11-17 00:00
609 查看
package org.metrox.drawlayoutdemo; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MainActivity extends AppCompatActivity { private String[] mPlanetTitles; private DrawerLayout mDrawerLayout; private ListView mDrawerList; private CharSequence mTitle; private List<String> BackStackTitles; FragmentManager fragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drawlayout); BackStackTitles = new ArrayList<String>(); BackStackTitles.add(getSupportActionBar().getTitle().toString()); //得到标题集合 mPlanetTitles = getResources().getStringArray(R.array.planets_array); //得到侧滑菜单布局 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); //得到列表项布局 mDrawerList = (ListView) findViewById(R.id.left_drawer); //添加列表数据适配器 mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mPlanetTitles)); //添加列表项单击事件监听 mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); } /* * 列表项事件监听 */ private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { selectItem(position); } } /*自定义点击事件*/ private void selectItem(int position) { //保存标题 mTitle = mPlanetTitles[position] ; //生成Fragment并替换已存在的Fragment CustomeFragment frg = new CustomeFragment(); List<String> fields = new ArrayList<String>(); Collections.addAll(fields,getResources().getStringArray(R.array.class_array)); fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .addToBackStack(mTitle.toString()) .replace(R.id.content_frame, CustomeFragment.newInstance(fields)) .commit(); BackStackTitles.add(mTitle.toString()); //高亮显示选中项 mDrawerList.setItemChecked(position, true); //改变标题 setTitle(mTitle.toString()); //关闭侧滑菜单 mDrawerLayout.closeDrawer(mDrawerList); } /*修改标题*/ @Override public void setTitle(CharSequence title) { mTitle = title; //得到标题栏,并修改标题 getSupportActionBar().setTitle(mTitle); } //处理后退键事件 @Override public void onBackPressed() { super.onBackPressed(); //得到暂时存放FRAGMENT的回退栈的数量 int count = getSupportFragmentManager().getBackStackEntryCount(); //因为栈是先进后出的原理,所以当前数量就是现在后退的那个FRAGMENT setTitle(BackStackTitles.get(count)); } }
package org.metrox.drawlayoutdemo; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class CustomeFragment extends Fragment { ArrayAdapter adapter; //实例化带参数Fragment public static CustomeFragment newInstance(List<String> fields) { CustomeFragment fragment = new CustomeFragment(); Bundle args = new Bundle(); args.putStringArrayList("fields", (ArrayList<String>) fields); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(getArguments() != null){ List<String> fields = getArguments().getStringArrayList("fields"); adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,fields); } } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //inflate第二个参数为容器,如果布局文件中已有FrameLayout,此处应为null //不然会报RemoveView错误 View v = inflater.inflate(R.layout.basefragment,null); ListView lv = (ListView) v.findViewById(R.id.lv); lv.setAdapter(adapter); return v; } private List<View> initControls(String title) { List<View> views = new ArrayList<View>(); Button btn = new Button(getActivity()); btn.setText(title); btn.setTextColor(Color.RED); btn.setBackgroundColor(Color.YELLOW); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), ((Button)v).getText(), Toast.LENGTH_SHORT).show(); } }); views.add(btn); return views; } @Override public void onDestroy() { super.onDestroy(); } @Override public void onDestroyView() { super.onDestroyView(); } }
相关文章推荐
- Android Fragment 参数传递与动态布局
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android Fragment之间参数传递通过Activity中的变量
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android进阶之Fragment和Activity之间通过setArguments传递复杂参数
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android中Fragment之间的通信和参数传递
- Android Fragment之间参数传递通过使用bundle进行参数传递
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android——软键盘操作+fragment之间传递参数+TextView限制字数,显示"..."
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数(转)
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android使用newInstance()实例化fragment&setArguments()传递参数
- android fragment传递参数_fragment之间传值的两种方法