1.BaseFragmentActivity
public abstract class BaseFragmentActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(initLayout());
initView();
initData();
}
protected abstract int initLayout();
protected abstract void initView();
protected abstract void initData();
//findViewByid
protected <T extends View> T fvd (int resId){
return findViewById(resId);
}
}
2.BaseFragment
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(initLayout(),container,false);
return view;
}
protected abstract int initLayout();
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ininView();
}
protected abstract void ininView();
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
}
protected abstract void initData();
//findViewById
protected <T extends View> T fvd (int resId){
return (T) getView().findViewById(resId);
}
}
3.0Handler,倒计时,无判断
public class MainActivity extends BaseFragmentActivity {
private TextView miao;
private int miaoshu = 3;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(miaoshu==0){
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
finish();
}else{
miao.setText(miaoshu+"秒");
miaoshu--;
handler.sendEmptyMessageDelayed(0,1000);
}
}
};
//布局
@Override
protected int initLayout() {
return R.layout.activity_main;
}
//控件
@Override
protected void initView() {
miao = fvd(R.id.miao);
}
//数据
@Override
protected void initData() {
handler.sendEmptyMessage(0);
}
}
3.Handler,倒计时
public class MainActivity extends BaseFragmentActivity{
private TextView miao;
private SharedPreferences sp;
private int time = 3;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0){
if (time>0){
time--;
miao.setText(time+"s");
handler.sendEmptyMessageDelayed(0,1000);
}else{
//存值
sp.edit().putBoolean("flag",true).commit();
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
handler.removeCallbacksAndMessages(null);
finish();
}
}
}
};
@Override
protected int initLayout() {
return R.layout.activity_main;
}
@Override
protected void initView() {
miao = fvd(R.id.miao);
}
@Override
protected void initData() {
sp = getSharedPreferences("key",MODE_PRIVATE);
boolean flag = sp.getBoolean("flag", false);
if (flag){
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
finish();
}else{
handler.sendEmptyMessageDelayed(0,1000);
}
}
}
4.BaseFragmentActivity, Fragment
public class Main2Activity extends BaseFragmentActivity{
private FrameLayout layout;
private RadioGroup radioGroup;
private DrawerLayout draw;
private FragmentOne fragmentOne;
private FragmentTwo fragmentTwo;
private String picUrl = "https://ws1.sinaimg.cn/large/0065oQSqly1g04lsmmadlj31221vowz7.jpg";
private ImageView imagedraw;
@Override
protected int initLayout() {
return R.layout.activity_main2;
}
@Override
protected void initView() {
layout = fvd(R.id.layout);
radioGroup = fvd(R.id.radioGroup);
draw = fvd(R.id.draw);
imagedraw = fvd(R.id.imagedraw);
}
@Override
protected void initData() {
draw.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
Glide.with(this).load(picUrl).into(imagedraw);
final FragmentManager fragmentManager = getSupportFragmentManager();
fragmentOne = new FragmentOne();
fragmentTwo = new FragmentTwo();
fragmentManager.beginTransaction()
.add(R.id.layout,fragmentOne)
.add(R.id.layout,fragmentTwo)
.show(fragmentOne)
.hide(fragmentTwo)
.commit();
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
private FragmentTransaction transaction;
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
transaction = fragmentManager.beginTransaction();
switch (checkedId){
case R.id.radioButton1:
transaction.show(fragmentOne)
.hide(fragmentTwo);
break;
case R.id.radioButton2:
transaction.show(fragmentTwo)
.hide(fragmentOne);
break;
default:
break;
}
transaction.commit();
}
});
}
}
5.Fragment布局
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".base.Main2Activity"
android:id="@+id/draw"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<FrameLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"
></FrameLayout>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/radioButton1"
android:text="我的"
android:button="@null"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
/>
<RadioButton
android:id="@+id/radioButton2"
android:text="信息"
android:button="@null"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
/>
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#ccc"
android:gravity="center_horizontal"
android:orientation="vertical"
>
<ImageView
android:id="@+id/imagedraw"
android:layout_width="100dp"
android:layout_height="100dp"
/>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
6.FragmentOne
public class FragmentOne extends BaseFragment {
private List<Fragment> list = new ArrayList<Fragment>();
private TabLayout tabLayout;
private ImageView pd;
private ViewPager pager;
private ArrayList<String> data1;
private TabAdter tabAdter;
@Override
protected int initLayout() {
return R.layout.fragmentone;
}
@Override
protected void ininView() {
tabLayout = fvd(R.id.tabLayout);
pd = fvd(R.id.pd);
pager = fvd(R.id.pager);
}
@Override
protected void initData() {
list.add(new Tabfrag1());
list.add(new Tabfrag2());
data1 = new ArrayList<String>();
data1.add("新闻");
data1.add("今日话题");
//适配器
tabAdter = new TabAdter(getChildFragmentManager(), data1, list);
pager.setAdapter(tabAdter);
//关联
tabLayout.setupWithViewPager(pager);
//频道管理,图片带值跳转
pd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(),PdActivity.class);
intent.putStringArrayListExtra("keyy",data1);
startActivityForResult(intent,100);
}
});
}
//接受回传的值
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==100&&resultCode==200){
ArrayList<String> newTab = data.getStringArrayListExtra("keyy");
//清楚所有数据
list.clear();
data1.clear();
tabLayout.removeAllTabs();
//重新添加数据
data1.addAll(newTab);
for (int i = 0; i < data1.size() ; i++) {
TabLayout.Tab tab = tabLayout.newTab();
tab.setText(data1.get(i));
tabLayout.addTab(tab);
if(i==0){
list.add(new FragmentOne());
}else if(i==1){
list.add(new FragmentTwo());
}
}
//刷新适配器
tabAdter.notifyDataSetChanged();
//重新关联
tabLayout.setupWithViewPager(pager);
}
}
}
7.FragmentOne布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
></android.support.design.widget.TabLayout>
<ImageView
android:id="@+id/pd"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/ic_launcher_background"
/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
></android.support.v4.view.ViewPager>
</LinearLayout>
8FragmentOne适配器
public class TabAdter extends FragmentPagerAdapter {
private ArrayList<String> data;
private List<Fragment> list;
public TabAdter(FragmentManager fm, ArrayList<String> data, List<Fragment> list) {
super(fm);
this.data = data;
this.list = list;
}
@Override
public Fragment getItem(int i) {
return list.get(i);
}
@Override
public int getCount() {
return list.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return data.get(position);
}
}
9.频道管理
public class FragmentTwo extends BaseFragment {
private Grid2Adter gridAdter;
private Grid2Adter gridAdter1;
private GridView grid_top;
private GridView grid_bottom;
private TextView wan2;
private ImageView fan2;
private List<String> tops = new ArrayList<String>();
private List<String> bottoms = new ArrayList<String>();
@Override
protected int initLayout() {
return R.layout.fragmenttwo;
}
@Override
protected void ininView() {
wan2 = fvd(R.id.wan2);
fan2 = fvd(R.id.fan2);
grid_top = fvd(R.id.grid_top);
grid_bottom = fvd(R.id.grid_bottom);
}
@Override
protected void initData() {
//模拟数据
initDatae();
gridAdter = new Grid2Adter(tops,getActivity());
grid_top.setAdapter(gridAdter);
gridAdter1 = new Grid2Adter(bottoms,getActivity());
grid_bottom.setAdapter(gridAdter1);
//添加上方条目监听
grid_top.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//添加到下方集合
bottoms.add(tops.get(position));
//先从上方集合删除
tops.remove(position);
//刷新适配器
gridAdter.notifyDataSetChanged();
gridAdter1.notifyDataSetChanged();
}
});
//添加下方条目监听
grid_bottom.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//添加到下方集合
tops.add(bottoms.get(position));
//先从上方集合删除
bottoms.remove(position);
//刷新适配器
gridAdter.notifyDataSetChanged();
gridAdter1.notifyDataSetChanged();
}
});
}
private void initDatae() {
tops.add("新闻");
tops.add("热点");
tops.add("视频");
tops.add("两会");
tops.add("北京");
tops.add("娱乐");
tops.add("图片");
tops.add("社会");
tops.add("新时代");
bottoms.add("电影");
bottoms.add("动漫");
bottoms.add("财经");
bottoms.add("国际");
bottoms.add("美食");
bottoms.add("文化");
}
}
10.频道管理布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/fan2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="300dp"
android:background="@drawable/fanhui"
/>
<TextView
android:id="@+id/wan2"
android:text="完成"
android:background="@drawable/my_stroke"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="center"
/>
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="切换的栏目"
/>
<GridView
android:id="@+id/grid_top"
android:numColumns="5"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
></GridView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="更多的栏目"
/>
<GridView
android:id="@+id/grid_bottom"
android:numColumns="5"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
></GridView>
</LinearLayout>
11.频道管理适配器
private List<String> data;
private Context context;
public Grid2Adter(List<String> data, Context context) {
this.data = data;
this.context = context;
}
12.PullToRefreshListView
public class Tabfrag1 extends BaseFragment {
private String url = "http://172.17.8.100/movieApi/movie/v1/findHotMovieList?page=1&&count=10";
private int pager = 1;
private List<JsonBeanp.ResultBean> resultData = new ArrayList<JsonBeanp.ResultBean>();
private List<String> data = new ArrayList<String>();
private PullToRefreshListView pull_list;
private Banner banner;
private PulldAdter pulldAdter;
private Dao dao;
@Override
protected int initLayout() {
return R.layout.tabfrag1;
}
@Override
protected void ininView() {
pull_list = fvd(R.id.pull_list);
banner = fvd(R.id.banner);
}
@Override
protected void initData() {
data.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic21363tj30ci08ct96.jpg");
data.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic259ohaj30ci08c74r.jpg");
data.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2b16zuj30ci08cwf4.jpg");
data.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2e7vsaj30ci08cglz.jpg");
banner.setImageLoader(new ImageLoader() {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(getActivity()).load(path).into(imageView);
}
});
banner.setDelayTime(2000);
banner.setImages(data);
banner.start();
dao = new Dao(getActivity());
//设置上拉下拉
pull_list.setMode(PullToRefreshListView.Mode.BOTH);
//设置刷新时可以滚动
pull_list.setScrollingWhileRefreshingEnabled(true);
//适配器
pulldAdter = new PulldAdter(resultData, getActivity());
pull_list.setAdapter(pulldAdter);
//加载数据
myData(pager);
//监听
pull_list.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
resultData.clear();
myData(pager);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
pager++;
myData(pager);
}
});
}
private void myData(int p) {
final String murl = url+p;
if (Http.isABoolean(getActivity())){
Http.MyAsTack(murl, new Http.CallBack() {
@Override
public void getData(String ss) {
jiexi(ss);
//添加数据库
dao.insertData(murl,ss);
}
});
}else{
Toast.makeText(getActivity(),"网络断开",Toast.LENGTH_LONG).show();
//查询数据库
String sa = dao.quertData(murl);
jiexi(sa);
}
}
//解析
private void jiexi(String ss) {
Gson gson = new Gson();
JsonBeanp jsonBeanp = gson.fromJson(ss, JsonBeanp.class);
List<JsonBeanp.ResultBean> result = jsonBeanp.getResult();
resultData.addAll(result);
pulldAdter.notifyDataSetChanged();
pull_list.onRefreshComplete();
}
}
13.List
public class Tabfrag2 extends BaseFragment {
private List<JsonBeanl.ResultBean.MlssBean.CommodityListBeanXX> datal = new ArrayList<JsonBeanl.ResultBean.MlssBean.CommodityListBeanXX>();
private String listUrl = "http://172.17.8.100/small/commodity/v1/commodityList";
private ListView list;
private ListAdter listAdter;
@Override
protected int initLayout() {
return R.layout.tabfrag2;
}
@Override
protected void ininView() {
list = fvd(R.id.list);
}
@Override
protected void initData() {
//适配器
listAdter = new ListAdter(datal, getActivity());
list.setAdapter(listAdter);
//判断网络
if(Http.isABoolean(getActivity())){
getmyData();
}else{
Toast.makeText(getActivity(), "请检查网络", Toast.LENGTH_SHORT).show();
}
}
private void getmyData() {
Http.MyAsTack(listUrl, new Http.CallBack() {
@Override
public void getData(String ss) {
jiexi(ss);
}
});
}
private void jiexi(String ss) {
Gson gson = new Gson();
JsonBeanl jsonBeanl = gson.fromJson(ss, JsonBeanl.class);
JsonBeanl.ResultBean result = jsonBeanl.getResult();
JsonBeanl.ResultBean.MlssBean mlss = result.getMlss();
List<JsonBeanl.ResultBean.MlssBean.CommodityListBeanXX> commodityList = mlss.getCommodityList();
datal.addAll(commodityList);
listAdter.notifyDataSetChanged();
}
}
14.多条目
public class XListAdter extends BaseAdapter {
private List<JsonBean.DataBean> data;
private Context context;
public XListAdter(List<JsonBean.DataBean> data, Context context) {
this.data = data;
this.context = context;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position%2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
switch (getItemViewType(position)){
case 0:
Holder holder;
if (convertView==null){
convertView = View.inflate(context,R.layout.item,null );
holder = new Holder();
holder.name=convertView.findViewById(R.id.name);
holder.imag = convertView.findViewById(R.id.imag);
convertView.setTag(holder);
}
else{
holder = (Holder) convertView.getTag();
}
JsonBean.DataBean dataBean = data.get(position);
holder.name.setText(dataBean.getTitle());
ImageLoader.getInstance().displayImage(dataBean.getThumbnail_pic_s03(),holder.imag);
break;
case 1:
Holder2 holder2;
if (convertView==null){
convertView = View.inflate(context,R.layout.item2,null );
holder2 = new Holder2();
holder2.name2=convertView.findViewById(R.id.name2);
holder2.imag2 = convertView.findViewById(R.id.imag2);
convertView.setTag(holder2);
}
else{
holder2 = (Holder2) convertView.getTag();
}
JsonBean.DataBean dataBean2 = data.get(position);
holder2.name2.setText(dataBean2.getTitle());
ImageLoader.getInstance().displayImage(dataBean2.getThumbnail_pic_s03(),holder2.imag2);
break;
}
return convertView;
}
class Holder{
ImageView imag;
TextView name;
}
class Holder2{
ImageView imag2;
TextView name2;
}
}
15.http
public class Http {
//网络判断
public static boolean isABoolean(Context context){
if(context!=null){
ConnectivityManager systemService = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = systemService.getActiveNetworkInfo();
if (info!=null){
return info.isAvailable();
}
}
return false;
}
//网络请求
public static String requrtHttpGet(String s){
try {
URL url = new URL(s);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if (code==HttpURLConnection.HTTP_OK){
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"utf-8"));
StringBuilder builder = new StringBuilder();
String str = "";
while ((str = reader.readLine())!=null){
builder.append(str);
}
return builder.toString();
}
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//接口回调
public interface CallBack{
void getData(String ss);
}
//异步
public static void MyAsTack(String url, final CallBack callBack){
new AsyncTask<String,Void,String>(){
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
callBack.getData(s);
}
@Override
protected String doInBackground(String... strings) {
return Http.requrtHttpGet(strings[0]);
}
}.execute(url);
}
}
16.MySql
public class MySql extends SQLiteOpenHelper {
public MySql(Context context) {
super(context, "bawei.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table pers(id integer primary key," +
"url text," +
"json text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
17.Dao
public class Dao {
private final MySql mySql;
private String table="pers";
public Dao(Context context){
mySql = new MySql(context);
}
//添加数据库
public void insertData(String url,String json){
SQLiteDatabase sqLiteDatabase = mySql.getWritableDatabase();
//添加
ContentValues values = new ContentValues();
values.put("url",url);
values.put("json",json);
sqLiteDatabase.insert(table,null,values);
}
//添加数据库
public String quertData(String url){
String json = "";
SQLiteDatabase sqLiteDatabase = mySql.getWritableDatabase();
Cursor query = sqLiteDatabase.query(table, null, "url=?", new String[]{url}, null, null, null);
while (query.moveToNext()){
json = query.getString(query.getColumnIndex("json"));
}
return json;
}
}