频道管理
来源:互联网 发布:叮叮软件功能 编辑:程序博客网 时间:2024/04/28 19:39
注意:
1. 在app的gradle里面
com.github.andyoom:draggrid:v1.0.1
2.在项目的build.gradle中添加
maven {url "https://jitpack.io"}
3.权限
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 震动权限 -->
<uses-permission android:name="android.permission.VIBRATE"/>
4.在功能清单中配置ChannelActivity
这个是 minSdkVersion 15
效果图:
下面开始贴代码
MainActivity(主界面进行相关操作)
import android.content.Intent;import android.os.AsyncTask;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.Button;import com.andy.library.ChannelActivity;import com.andy.library.ChannelBean;import com.example.lixin.xiangmu1zhoukao3.bean.ComicInfo;import com.example.lixin.xiangmu1zhoukao3.database.DbUtils;import com.example.lixin.xiangmu1zhoukao3.utils.StreamTools;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.nostra13.universalimageloader.core.DisplayImageOptions;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TabLayout tabLayout; private ViewPager viewPager; private String[] titles = {"推荐", "热点", "北京", "时尚", "科技", "体育", "娱乐", "汽车", "房产", "漫画"}; private DbUtils dbUtils; private ArrayList<ChannelBean> allList; private ArrayList<ChannelBean> userList; private MyPageAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); tabLayout.setupWithViewPager(viewPager); } 给tablayout赋值 private void initData() { allList = new ArrayList<>(); userList = new ArrayList<>(); dbUtils = new DbUtils(this); List<ChannelBean> allChannels = dbUtils.getAllChannels(); if (allChannels == null||allChannels.size()<1){ ChannelBean channelBean; for (int i = 0;i<10;i++){ if (i<5){ channelBean = new ChannelBean(titles[i],true); userList.add(channelBean); }else { channelBean = new ChannelBean(titles[i],false); } allList.add(channelBean); } dbUtils.saveChnnels(allList); }else { allList.addAll(allChannels); List<ChannelBean> userChannels = dbUtils.getUserChannels(); userList.addAll(userChannels); } adapter = new MyPageAdapter(getSupportFragmentManager(),userList); viewPager.setAdapter(adapter); } private void initView() { tabLayout = (TabLayout) findViewById(R.id.tablayout); viewPager = (ViewPager) findViewById(R.id.viewpager); Button btn_pindao = (Button) findViewById(R.id.btn_pindao); btn_pindao.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_pindao: ChannelActivity.startChannelActivity(MainActivity.this, allList); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ChannelActivity.REQUEST_CODE&&resultCode == ChannelActivity.RESULT_CODE){ String stringExtra = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY); if (TextUtils.isEmpty(stringExtra)){ return; }else { List<ChannelBean> list = new Gson().fromJson(stringExtra,new TypeToken<List<ChannelBean>>(){}.getType()); if (list==null||list.size()<1){ return; } allList.clear(); userList.clear(); allList.addAll(list); for (ChannelBean channelBean : list){ boolean select = channelBean.isSelect(); if (select){ userList.add(channelBean); } } adapter.notifyDataSetChanged(); dbUtils.clearChannels(); dbUtils.saveChnnels(allList); FragmentManager supportFragmentManager = getSupportFragmentManager(); List<Fragment> fragments = supportFragmentManager.getFragments(); FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction(); for (Fragment fragment:fragments) { fragmentTransaction.remove(fragment); } fragmentTransaction.commitAllowingStateLoss(); recreate(); } } }}
MyApplication(加载图片 并在配置文件中配置)
import android.app.Application;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;/** * Created by hua on 2017/8/18. */public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) .memoryCacheExtraOptions(480,800)//配置内存缓存图片的尺寸 //.diskCacheExtraOptions() bug 不推介你手动去配置 .memoryCacheSize(2 * 1024 * 1024)//配置内存缓存的大小 例如 : 2* 1024 * 1024 = 2MB .threadPoolSize(3)//配置加载图片的线程数 .threadPriority(100)//配置线程的优先级 .build();//配置构建完成 ImageLoader.getInstance().init(config); }}
MyPageAdapter(得到值并返回对应的fragment 防止fragment和tablayout 错乱)
import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import com.andy.library.ChannelBean;import java.util.ArrayList;/** * Created by hua on 2017/8/18. */public class MyPageAdapter extends FragmentPagerAdapter { private FragmentManager mFragmentManager; ArrayList<ChannelBean> mUserList; public MyPageAdapter(FragmentManager fm, ArrayList<ChannelBean> userList) { super(fm); mFragmentManager = fm; mUserList = userList; } @Override public Fragment getItem(int position) { String name = mUserList.get(position).getName(); switch (name) { case "推荐": return new ComicFragment(); case "热点": return new ComicFragment(); case "北京": return new ComicFragment(); case "时尚": return new ComicFragment(); case "科技": return new ComicFragment(); case "体育": return new ComicFragment(); case "娱乐": return new ComicFragment(); case "汽车": return new ComicFragment(); case "房产": return new ComicFragment(); case "漫画": return new ComicFragment(); } return null; } @Override public int getCount() { return mUserList == null ? 0 : mUserList.size(); } //ViewPager与TabLayout绑定后,这里获取到PageTitle就是Tab的Text //设置tablayout的每个tab的标题 @Override public CharSequence getPageTitle(int position) { return mUserList.get(position).getName(); }}
Fragment(fragment中请求数据)
import android.content.Intent;import android.os.AsyncTask;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.AdapterView;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.example.lixin.xiangmu1zhoukao3.bean.ComicInfo;import com.example.lixin.xiangmu1zhoukao3.utils.StreamTools;import com.google.gson.Gson;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;/** * Created by hua on 2017/8/18. */public class ComicFragment extends Fragment { private View view; private ListView listView; private DisplayImageOptions options; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.comic_fragment,container,false); return view; } @Override public void onActivityCreated( Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); listView = (ListView) view.findViewById(R.id.listview); options = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .showImageOnLoading(R.mipmap.ic_launcher) .build(); } private void initData() { new AsyncTask<String, Void, String>() { @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (s!=null){ Gson gson = new Gson(); ComicInfo comicInfo = gson.fromJson(s, ComicInfo.class); final List<ComicInfo.DataBean.ComicsBean> data = comicInfo.getData().getComics(); MyBaseAdapter adapter = new MyBaseAdapter(data); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(getActivity(),LastActivity.class); intent.putExtra("label_text",data.get(position).getLabel_text()); startActivity(intent); } }); } } @Override protected String doInBackground(String... params) { try { String path = params[0]; URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); int code = connection.getResponseCode(); if (code == 200){ InputStream is = connection.getInputStream(); String json = StreamTools.readFrom(is); return json; } } catch (Exception e) { e.printStackTrace(); } return null; } }.execute("http://api.kkmh.com/v1/daily/comic_lists/0?since=0&gender=0&sa_event=eyJwcm9qZWN0Ijoia3VhaWthbl9hcHAiLCJ0aW1lIjoxNDg3NzQyMjQwNjE1LCJwcm9wZXJ0aWVzIjp7IkhvbWVwYWdlVGFiTmFtZSI6IueDremXqCIsIlZDb21tdW5pdHlUYWJOYW1lIjoi54Ot6ZeoIiwiJG9zX3ZlcnNpb24iOiI0LjQuMiIsIkdlbmRlclR5cGUiOiLlpbPniYgiLCJGcm9tSG9tZXBhZ2VUYWJOYW1lIjoi54Ot6ZeoIiwiJGxpYl92ZXJzaW9uIjoiMS42LjEzIiwiJG5ldHdvcmtfdHlwZSI6IldJRkkiLCIkd2lmaSI6dHJ1ZSwiJG1hbnVmYWN0dXJlciI6ImJpZ25veCIsIkZyb21Ib21lcGFnZVVwZGF0ZURhdGUiOjAsIiRzY3JlZW5faGVpZ2h0IjoxMjgwLCJIb21lcGFnZVVwZGF0ZURhdGUiOjAsIlByb3BlcnR5RXZlbnQiOiJSZWFkSG9tZVBhZ2UiLCJGaW5kVGFiTmFtZSI6IuaOqOiNkCIsImFidGVzdF9ncm91cCI6MTEsIiRzY3JlZW5fd2lkdGgiOjcyMCwiJG9zIjoiQW5kcm9pZCIsIlRyaWdnZXJQYWdlIjoiSG9tZVBhZ2UiLCIkY2FycmllciI6IkNoaW5hIE1vYmlsZSIsIiRtb2RlbCI6IlZQaG9uZSIsIiRhcHBfdmVyc2lvbiI6IjMuNi4yIn0sInR5cGUiOiJ0cmFjayIsImRpc3RpbmN0X2lkIjoiQTo2YWRkYzdhZTQ1MjUwMzY1Iiwib3JpZ2luYWxfaWQiOiJBOjZhZGRjN2FlNDUyNTAzNjUiLCJldmVudCI6IlJlYWRIb21lUGFnZSJ9"); } class MyBaseAdapter extends BaseAdapter{ private List<ComicInfo.DataBean.ComicsBean> data; private MyBaseAdapter(List<ComicInfo.DataBean.ComicsBean> data){ this.data = data; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { if (position%2==0){ return 0; }else { return 1; } } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; ViewHolder1 holder1 = null; switch (getItemViewType(position)){ case 0: if (convertView == null){ convertView = View.inflate(getActivity(),R.layout.item,null); holder = new ViewHolder(); holder.tv = (TextView) convertView.findViewById(R.id.item_tv); holder.iv = (ImageView) convertView.findViewById(R.id.item_iv); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv.setText(data.get(position).getTitle()); ImageLoader.getInstance().displayImage(data.get(position).getCover_image_url(),holder.iv,options); break; case 1: if (convertView == null){ convertView = View.inflate(getActivity(),R.layout.item1,null); holder1 = new ViewHolder1(); holder1.tv1 = (TextView) convertView.findViewById(R.id.item1_tv); holder1.iv1 = (ImageView) convertView.findViewById(R.id.item1_iv); convertView.setTag(holder1); } else { holder1 = (ViewHolder1) convertView.getTag(); } holder1.tv1.setText(data.get(position).getTitle()); ImageLoader.getInstance().displayImage(data.get(position).getCover_image_url(),holder1.iv1,options); break; } return convertView; } class ViewHolder{ TextView tv; ImageView iv; } class ViewHolder1{ TextView tv1; ImageView iv1; } }}
Sqlite(创建数据库)
import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by hua on 2017/8/16. */public class Sqlite extends SQLiteOpenHelper { public Sqlite(Context context) { super(context, "drap.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table drap(_id Integer primary key autoincrement,name varchar(20),isSelect Integer(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
DbUtils(数据库增删改查)
import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.andy.library.ChannelBean;import java.util.ArrayList;import java.util.List;/** * Created by hua on 2017/8/16. */public class DbUtils { private final SQLiteDatabase db; private ChannelBean channelBean; public DbUtils(Context context){ Sqlite sqlite = new Sqlite(context); db = sqlite.getWritableDatabase(); } public void saveChnnels(List<ChannelBean> channelBeanList) { if (channelBeanList == null || channelBeanList.size() < 0) { return; } for (ChannelBean channelBean : channelBeanList) { ContentValues values = new ContentValues(); values.put("name", channelBean.getName()); values.put("isSelect", channelBean.isSelect()); db.insert("drap", null, values); } } public List<ChannelBean> getAllChannels() { Cursor cursor = db.query("drap", null, null, null, null, null, null); List<ChannelBean> channelBeanList = new ArrayList<>(); ChannelBean channelBean; while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); int selected = cursor.getInt(cursor.getColumnIndex("isSelect")); channelBeanList.add(new ChannelBean(name, selected == 0 ? false : true)); } cursor.close(); return channelBeanList; } public List<ChannelBean> getUserChannels() { Cursor cursor = db.query("drap", null, "isSelect=?", new String[]{"1"}, null, null, null); List<ChannelBean> channelBeanList = new ArrayList<>(); ChannelBean channelBean; while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); int selected = cursor.getInt(cursor.getColumnIndex("isSelect")); channelBeanList.add(new ChannelBean(name, selected == 0 ? false : true)); } cursor.close(); return channelBeanList; } public void clearChannels() { db.delete("drap", null, null); }}
manifest(配置文件)
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.lixin.xiangmu1zhoukao3"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 震动权限 --> <uses-permission android:name="android.permission.VIBRATE"/> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.andy.library.ChannelActivity"> </activity> <activity android:name=".LastActivity"> </activity> </application></manifest>
阅读全文
0 0
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 频道管理
- 百度AI——人脸识别的简单应用
- python os.path模块
- STL——基础知识点代码详解
- asp.net core 2.0 Cookie 使用
- JavaScript高级程序设计 第二章 在HTML中使用javascript
- 频道管理
- WSDL请求数据的相关代码
- Nginx+fastDFS-nginx-module+FastDFS配置分布式文件系统
- ABAP几种内表的操作
- P1939 【模板】矩阵加速(数列)
- Python文件与文件系统系列 -- stat模块
- 刷题——Bridging signals POJ
- 使用Akka的远程调用
- CardView轻松实现圆角卡片效果