昨天写的这几篇博客,Android-fragment简介-fragment的简单使用,Activity-fragment-ListView展示,Android-fragment生命周期,Android-fragment的替换, 都是讲解使用 android.app.Fragment 自身的Fragment,不是v4包的;
而今天的博客是专门讲解v4.app.Fragment(v4包的),全部都是要导入v4包,使用v4包的Fragment有个好处就是可以兼容低版本
以前的导包:
import android.app.Fragment; import android.app.FragmentTransaction;
现在的导包:
import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction;
Activity的代码:
package liudeli.activity.fragment; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.widget.Button; import liudeli.activity.R; /** * 全部使用v4.app.Fragment支持包来实现 * 既然用了全部使用v4.app.Fragment支持包来实现,所以Activity必须是FragmentActivity才能识别布局的<fragment */ public class MyTestFragmentActivity4 extends FragmentActivity implements View.OnClickListener { private Button msg; private Button persons; private Button my; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_fragment4); initView(); initChangeFragment(); initListener(); } private void initView() { msg = findViewById(R.id.bt_msg); persons = findViewById(R.id.bt_persons); my = findViewById(R.id.bt_my); } /** * 初始化默认切换到 消息Fragment */ private void initChangeFragment() { /** * 得到FragmentManager 要用 v4支持包里面的getSupportFragmentManager */ FragmentManager manager = getSupportFragmentManager(); // 开始事务 得到事务 FragmentTransaction fragmentTransaction = manager.beginTransaction(); // 替换操作 fragmentTransaction.replace(R.id.frame_layout, new MsgFragment()); // 提交 fragmentTransaction.commit(); setButton(0); } private void initListener() { msg.setOnClickListener(this); persons.setOnClickListener(this); my.setOnClickListener(this); } @Override public void onClick(View v) { /** * 得到FragmentManager 要用 v4支持包里面的getSupportFragmentManager */ FragmentManager manager = getSupportFragmentManager(); // 开始事务 得到事务 FragmentTransaction fragmentTransaction = manager.beginTransaction(); Fragment fragment = null; switch (v.getId()) { case R.id.bt_msg: fragment = new MsgFragment(); setButton(0); break; case R.id.bt_persons: setButton(1); fragment = new PersonsFragment(); break; case R.id.bt_my: setButton(2); fragment = new MyWoFragment(); break; } // 替换操作 fragmentTransaction.replace(R.id.frame_layout, fragment); // 提交 fragmentTransaction.commit(); } /** * 设置三个按钮的颜色 * @param value */ private void setButton(int value) { switch (value) { case 0: msg.setTextColor(Color.RED); persons.setTextColor(Color.BLACK); my.setTextColor(Color.BLACK); break; case 1: msg.setTextColor(Color.BLACK); persons.setTextColor(Color.RED); my.setTextColor(Color.BLACK); break; case 2: msg.setTextColor(Color.BLACK); persons.setTextColor(Color.BLACK); my.setTextColor(Color.RED); break; } } }
Activity布局的代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 帧布局 下面的LinearLayout已经先填充了,剩下的控件我全部来填充 --> <FrameLayout android:id="@+id/frame_layout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > </FrameLayout> <!-- 我的layout_weight默认为0,我先填充我的控件 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:layout_below="@id/frame_layout"> <Button android:id="@+id/bt_msg" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="消息" android:gravity="center" android:textColor="@android:color/black" /> <Button android:id="@+id/bt_persons" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="好友" /> <Button android:id="@+id/bt_my" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="我的" /> </LinearLayout> </LinearLayout>
第一个Fragment的代码:
package liudeli.activity.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.Toast; public class MsgFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); return new ListView(getActivity()); // Fragment不能使用this } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); final String[] data = new String[]{ "你有一条消息1", "你有一条消息2", "你有一条消息3", "你有一条消息4", "你有一条消息5", "你有一条消息6", "你有一条未读消息6", "你有一条未读消息7", "你有一条未读消息8", }; ListView listView = (ListView)view; ListAdapter listAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, data); listView.setAdapter(listAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getActivity(), data[position], Toast.LENGTH_SHORT).show(); } }); } }
第二个Fragment的代码:
package liudeli.activity.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.Toast; public class PersonsFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); return new ListView(getActivity()); // Fragment不能使用this } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); final String[] data = new String[]{ "张三", "李四", "王五", "赵六", "王八", "朱九", "厨十", "阿名", "雄霸", }; ListView listView = (ListView)view; ListAdapter listAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, data); listView.setAdapter(listAdapter); // ListVIew 设置可以解决,Item长按无反应的问题: android:descendantFocusability="blocksDescendants" // listView.setDescendantFocusability(2); /*listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getActivity(), data[position], Toast.LENGTH_SHORT).show(); return true; } });*/ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getActivity(), data[position], Toast.LENGTH_SHORT).show(); } }); } }
第三个Fragment的代码:
package liudeli.activity.fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.GridView; import android.widget.ListAdapter; public class MyWoFragment extends android.support.v4.app.Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); return new GridView(getActivity()); // Fragment不能使用this } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); String[] data = new String[]{ "我的账号", "我的社交", "我的简洁", "我的钱包", "我的设置", "退出账号", "重置账号" }; GridView gridView = (GridView)view; // 设置三列 gridView.setNumColumns(3); ListAdapter listAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, data); gridView.setAdapter(listAdapter); } }
效果: