频道管理

注意:

    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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值