频道管理

来源:互联网 发布:叮叮软件功能 编辑:程序博客网 时间: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();    }    //ViewPagerTabLayout绑定后,这里获取到PageTitle就是TabText    //设置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>

原创粉丝点击