软件框架的搭建,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的框架就搭建完成了,自己的笔记,方便日后查看。