软件框架的搭建,Android通用的,是学习尚硅谷之后的笔记整理。
下面四个按钮直接的切换,不同的fragment之间的跳转。
关键代码
布局页面activity_mian.xml
<?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"> <!--标题栏--> <include layout="@layout/titlebar"/> <!--FrameLayout--> <FrameLayout android:id="@+id/fl_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <!--RadioGroup--> <RadioGroup android:id="@+id/rg_bottom_tag" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#11000000" android:gravity="center_vertical" android:orientation="horizontal" android:padding="3dp" > <RadioButton android:id="@+id/rb_common_frame" android:text="常用框架" android:drawableTop="@drawable/rb_common_frame_drawable_selector" style="@style/botttom_tag_style" /> <RadioButton android:id="@+id/rb_thirdparty" android:text="第三方" android:drawableTop="@drawable/rb_thirdparty_drawable_selector" style="@style/botttom_tag_style" /> <RadioButton android:id="@+id/rb_custom" android:text="自定义控件" android:drawableTop="@drawable/rb_custom_drawable_selector" style="@style/botttom_tag_style" /> <RadioButton android:id="@+id/rb_other" android:text="其他" android:drawableTop="@drawable/rb_other_drawable_selector" style="@style/botttom_tag_style" /> </RadioGroup> </LinearLayout>
titllebar.xml
<?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="50dp" android:background="@android:color/holo_blue_light" android:gravity="center" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:text="hetaoyuan" android:textColor="#ffffff" android:textSize="20sp" /> </LinearLayout>
BaseFragment.java
package com.example.base; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * CommonFragment的所有的基类,四个页面的整体布局的管理页面,都要继承该类 */ public abstract class BaseFragment extends Fragment { protected Context mContext; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity(); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return initView(); } /** * * @return * 强制子类重写,实现子类特有的ui */ protected abstract View initView(); @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); } /** * 当需要初始化或者联网绑定数据,展示数据等等 */ protected void initData(){ } }
四个页面的fragment
CommonFrameFragment.java
package com.example.fragment; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.example.adapter.CommmonFragmentAdapter; import com.example.base.BaseFragment; import com.example.soft.R; public class CommonFrameFragment extends BaseFragment { public static final String TAG = CommonFrameFragment.class.getSimpleName(); private TextView textView; private ListView mListView; private String[] datas; private CommmonFragmentAdapter adapter; @Override protected View initView() { Log.e(TAG, "常用框架页面被初始化了。。。。。"); View view = View.inflate(mContext, R.layout.fragment_common_frame, null); mListView = view.findViewById(R.id.listview); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { String data = datas[i]; Toast.makeText(mContext,"data=="+i,Toast.LENGTH_SHORT).show(); } }); return view; } @Override protected void initData() { super.initData(); Log.e(TAG, "常用框架数据被初始化了。。。。。"); //准备数据 datas = new String[]{"apple", "grape", "peach", "apricot", "pear"}; //设置适配器 adapter = new CommmonFragmentAdapter(mContext, datas); mListView.setAdapter(adapter); } }
ThirdPartyFragment.java
package com.example.fragment; import android.graphics.Color; import android.util.Log; import android.view.Gravity; import android.view.View; import android.widget.TextView; import com.example.base.BaseFragment; public class ThirdPartyFragment extends BaseFragment { public static final String TAG = ThirdPartyFragment.class.getSimpleName(); private TextView textView; @Override protected View initView() { Log.e(TAG,"常用第三方页面被初始化了。。。。。"); textView = new TextView(mContext); textView.setTextSize(20); textView.setGravity(Gravity.CENTER); textView.setTextColor(Color.RED); return textView; } @Override protected void initData() { super.initData(); Log.e(TAG,"常用第三方数据被初始化了。。。。。"); textView.setText("第三方CommonFrameFragment页面"); } }
CustomerFragment.java
package com.example.fragment; import android.graphics.Color; import android.util.Log; import android.view.Gravity; import android.view.View; import android.widget.TextView; import com.example.base.BaseFragment; public class CustomerFragment extends BaseFragment { public static final String TAG = CustomerFragment.class.getSimpleName(); private TextView textView; @Override protected View initView() { Log.e(TAG,"自定义页面被初始化了。。。。。"); textView = new TextView(mContext); textView.setTextSize(20); textView.setGravity(Gravity.CENTER); textView.setTextColor(Color.RED); return textView; } @Override protected void initData() { super.initData(); Log.e(TAG,"常自定义数据被初始化了。。。。。"); textView.setText("自定义页面"); } }
OtherFragment.java
package com.example.fragment; import android.graphics.Color; import android.util.Log; import android.view.Gravity; import android.view.View; import android.widget.TextView; import com.example.base.BaseFragment; public class OtherFragment extends BaseFragment { public static final String TAG = OtherFragment.class.getSimpleName(); private TextView textView; @Override protected View initView() { Log.e(TAG,"其他页面被初始化了。。。。。"); textView = new TextView(mContext); textView.setTextSize(20); textView.setGravity(Gravity.CENTER); textView.setTextColor(Color.RED); return textView; } @Override protected void initData() { super.initData(); Log.e(TAG,"其他数据被初始化了。。。。。"); textView.setText("其他页面"); } }
只提供第一个的页面fragment数据
CommmonFragmentAdapter.java
package com.example.adapter; import android.content.Context; import android.graphics.Color; import android.graphics.Point; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /** * 常用框架的fragment */ public class CommmonFragmentAdapter extends BaseAdapter{ private final Context mContext; private final String[] mDatas; public CommmonFragmentAdapter(Context context, String[] datas){ this.mContext = context; this.mDatas = datas; } @Override public int getCount() { return mDatas.length; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { TextView textView = new TextView(mContext); textView.setTextColor(Color.RED); textView.setPadding(10,10,10,10); textView.setTextSize(20); textView.setText(mDatas[i]); return textView; } }
主类 MainActivity.java
package com.example.soft; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.widget.RadioGroup; import com.example.base.BaseFragment; import com.example.fragment.CommonFrameFragment; import com.example.fragment.CustomerFragment; import com.example.fragment.OtherFragment; import com.example.fragment.ThirdPartyFragment; import java.util.ArrayList; import java.util.List; public class MainActivity extends FragmentActivity { private static final String TAG = "MainActivity"; private RadioGroup mRg_main; private List<BaseFragment> mBaseFragments; private int position; //上一次的 private Fragment mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate: "); initView(); initFragment(); setListener(); } private void setListener() { mRg_main.setOnCheckedChangeListener(new MyOnCheckChangeListener()); //默认选中 mRg_main.check(R.id.rb_common_frame); } class MyOnCheckChangeListener implements RadioGroup.OnCheckedChangeListener { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { switch (i) { case R.id.rb_common_frame: position = 0; break; case R.id.rb_thirdparty: position = 1; break; case R.id.rb_custom: position = 2; break; case R.id.rb_other: position = 3; break; } //根据位置得到对应的fragment BaseFragment to = getFragment(); //替换 switchFragment(mContext,to); } /** * @param from 刚显示的fragment,马上就要被隐藏 * @param to 切换到,马上就要显示 */ private void switchFragment(Fragment from, Fragment to) { if (from != to) { mContext = to; FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); //才切换 //判断有没有被添加 if (!to.isAdded()) { //to没有被添加 //from隐藏 if (from != null) { ft.hide(from); } //添加to if (to != null) { ft.add(R.id.fl_content,to).commit(); } } else { //to 已添加 //from隐藏 if (from != null) { ft.hide(from); } //显示to if (to != null) { ft.show(to).commit(); } } } } // private void switchFragment(BaseFragment fragment) { // //得到fragmentManager // FragmentManager fm = getSupportFragmentManager(); // //开启事务 // FragmentTransaction transaction = fm.beginTransaction(); // //替换 // transaction.replace(R.id.fl_content,fragment); // //提交 // transaction.commit(); // } /** * 根据位置得到对应的fragment、 * * @return */ public BaseFragment getFragment() { BaseFragment fragment = mBaseFragments.get(position); return fragment; } } private void initFragment() { mBaseFragments = new ArrayList<>(); mBaseFragments.add(new CommonFrameFragment());//常用 mBaseFragments.add(new ThirdPartyFragment());//第三方 mBaseFragments.add(new CustomerFragment());//自定义 mBaseFragments.add(new OtherFragment());//其他 } private void initView() { setContentView(R.layout.activity_main); mRg_main = findViewById(R.id.rg_bottom_tag); } }
drawable的一下资源
rb_common_frame_drawable_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/ic_tab_video"/> <item android:state_checked="true" android:drawable="@drawable/ic_tab_video_press"/> </selector>
rb_custom_drawable_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/ic_tab_netvideo"/> <item android:state_checked="true" android:drawable="@drawable/ic_tab_netvideo_press"/> </selector>
rb_other_drawable_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/ic_tab_netaudio"/> <item android:state_checked="true" android:drawable="@drawable/ic_tab_netaudio_press"/> </selector>
rb_style_textcolor_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:color="#363636"/> <item android:state_checked="true" android:color="#3097FD"/> </selector>
rb_thirdparty_drawable_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/ic_tab_audio"/> <item android:state_checked="true" android:drawable="@drawable/ic_tab_audio_press"/> </selector>
rb_video_textcolor_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:color="#363636"/> <item android:state_checked="true" android:color="#3097FD"/> </selector>
图片
到此,一个简单的Android的框架就搭建完成了,自己的笔记,方便日后查看。