仿今日头条的频道管理

仿今日头条的频道管理

这里集成了第三方的库:

   1. 在app的gradle里面dependencies下配置

       compile 'com.github.andyoom:draggrid:v1.0.1'

   2.在项目的build.gradle中的allprojects下添加
        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     

  <activity android:name="com.andy.library.ChannelActivity"></activity>

   配置完成,之后再代码中调用依赖库的方法:

  ChannelActivity.startChannelActivity("上下文",集合);

  调用这个方法就可以跳到频道管理页面,依赖库中还实现了:我的频道中可以长按拖动变位置,点击删除到更多频道,更多频道中点击添加到我的频道中,等功能。

然后通过onActivityResult()方法拿到频道管理中的数据,具体的请求码,结果码,打开相应的依赖库文件,ChannelActivity中有定义。

效果图如下:

    

接下来做一个简单的项目,来使用一下这个频道管理功能

将要完成的页面布局:


这个页面中,标题是一个TabLayout,Tablayout最右边的下箭头可以点击,跳转到频道管理界面,正文部分是Viewpager,实现TabLayout标题和Viewpager中的Fragment一一关联,频道管理中的我的频道内容会展示到Tablayout中,做到频道管理和tablayout关联,Viepager内容也随着变化

使用TabLayout要添加依赖:com.android.support:design (com.android.support:design:26.0.0-alpha1)

MainActivity类

你会看到我下面的代码中集合用到到的泛型是ChannelBean,这是频道管理依赖库中已经写好的类,配置好,直接用就可以

创建数据库保存频道管理中的内容,第一次数据没有内容,会默认添加数据,当数据库中有内容就会使用数据库中存储的内容


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private String[] tabTitles={"推荐","热点","杭州","时尚","科技","体育","娱乐","军事","财经","汽车","房产","社会","情感","女人","旅游","健康","美女","游戏","数码"};
    private List<ChannelBean> allList;
    private List<ChannelBean> userList;
    private ViewPager viewpager;
    private MyViewpageAdapter myViewpageAdapter;
    private SQLiteDao dao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout);
        ImageView loadMorePindao = (ImageView) findViewById(R.id.loadMorePindao);
        TextView showTv = (TextView) findViewById(R.id.showTv);
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        initData();
        //tablayout和viewpager关联起来
       tabLayout.setupWithViewPager(viewpager);
        showTv.setOnClickListener(this);
        loadMorePindao.setOnClickListener(this);
    }
    private void initData(){
        dao = new SQLiteDao(this);
        allList=new ArrayList<>();
        userList=new ArrayList<>();
        ArrayList<ChannelBean> allpindao = dao.findPindao();
        if (allpindao==null||allpindao.size()<1){
            ChannelBean channelBean;
            for (int i=0;i<19;i++){
                if (i<8){
                    channelBean= new ChannelBean(tabTitles[i], true);
                    userList.add(channelBean);
                }else{
                    channelBean=new ChannelBean(tabTitles[i],false);
                }
                allList.add(channelBean);
            }
            dao.addPindao(allpindao);
        }else{
            allList.addAll(allpindao);
            ArrayList<ChannelBean> userPindao = dao.findUserPindao();
            userList.addAll(userPindao);

        }
        myViewpageAdapter = new MyViewpageAdapter(getSupportFragmentManager(),userList);
        viewpager.setAdapter(myViewpageAdapter);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.showTv:
                CityListActivity.startCityActivityForResult(this);
                break;
            case R.id.loadMorePindao:
                ChannelActivity.startChannelActivity(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);
            Gson gson = new Gson();
            List<ChannelBean> list= gson.fromJson(stringExtra, new TypeToken<List<ChannelBean>>() {
            }.getType());
            allList.clear();
            userList.clear();
            allList.addAll(list);
            for (ChannelBean lists:list) {
                if (lists.isSelect()){
                    userList.add(lists);
                }
            }
            myViewpageAdapter.notifyDataSetChanged();
            dao.deletePindao();
            dao.addPindao(allList);
            
  //可能会在添加频道,删除频道,频道位置变化是,tablayout标题内容,与framgnet显示的内容不相符了,这时候就要得到
fragment管理者,将fragment都移除掉,在重新添加
            FragmentManager supportFragmentManager = getSupportFragmentManager();
       List<Fragment> fragments = supportFragmentManager.getFragments();
       FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
       for (Fragment fragment:fragments) {
         fragmentTransaction.remove(fragment);
        }
       fragmentTransaction.commitAllowingStateLoss();
        recreate(); 

     }
    }
}

数据库类     

public class SQLite extends SQLiteOpenHelper {
    public SQLite(Context context) {
        super(context,"pindao.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table pindao(name varchar(20),selected integer)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

数据库具体操作类

public class SQLiteDao {

    private final SQLiteDatabase db;

    public SQLiteDao(Context context){
        SQLite sqLite = new SQLite(context);
        db = sqLite.getWritableDatabase();
    }
    public void addPindao(List<ChannelBean> channelBeanList){
        for (ChannelBean channelBean:channelBeanList) {
            ContentValues values = new ContentValues();
            values.put("name",channelBean.getName());
            values.put("selected",channelBean.isSelect());
            db.insert("pindao",null,values);
        }
    }
    public ArrayList<ChannelBean> findPindao(){
        Cursor cursor = db.query("pindao", null, null, null, null, null, null);
        ArrayList<ChannelBean> list = new ArrayList<>();
        while (cursor.moveToNext()){
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int selected = cursor.getInt(cursor.getColumnIndex("selected"));
            ChannelBean channelBean = new ChannelBean(name,selected==0?false:true);
            list.add(channelBean);
        }
        return list;
    }
    public ArrayList<ChannelBean> findUserPindao(){
        Cursor cursor = db.query("pindao", null,"selected=?",new String[]{"1"}, null, null, null);
        ArrayList<ChannelBean> channelBeens = new ArrayList<>();
        while (cursor.moveToNext()){
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int selected = cursor.getInt(cursor.getColumnIndex("selected"));
            ChannelBean channelBean = new ChannelBean(name, selected == 0 ? false : true);
            channelBeens.add(channelBean);
        }
        return channelBeens;
    }
    public void deletePindao(){
        db.delete("pindao",null,null);
    }

Adapter类

public class MyViewpageAdapter extends FragmentPagerAdapter {
    private List<ChannelBean> tabTitles;
    public MyViewpageAdapter(FragmentManager fm, List<ChannelBean> tabTitles) {
        super(fm);
        this.tabTitles=tabTitles;
    }

    @Override
    public Fragment getItem(int position) {
        MyFragment myFragment = new MyFragment();
        Bundle bundle = new Bundle();
        bundle.putString("text",tabTitles.get(position).getName());
        myFragment.setArguments(bundle);
        return myFragment;
    }

    @Override
    public int getCount() {
        return tabTitles.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles.get(position).getName();
    }
}

Fragment类

public class MyFragment extends Fragment {

    private View view;
    private ListView lv;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.myfragment, container, false);
        return view;
    }

    //使用的xutils3
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        lv = (ListView) view.findViewById(R.id.lv);
        String url="http://api.kkmh.com/v1/daily/comic_lists/0";
        RequestParams requestParams = new RequestParams(url);
        requestParams.addQueryStringParameter("since","0");
        requestParams.addQueryStringParameter("gender","0");
        x.http().get(requestParams, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Gson gson = new Gson();
                Data data = gson.fromJson(result, Data.class);
                List<Data.DataBean.ComicsBean> comics = data.getData().getComics();
                MyAdapter adapter = new MyAdapter(comics);
                lv.setAdapter(adapter);
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {

            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });

    }
    class MyAdapter extends BaseAdapter{

        private List<Data.DataBean.ComicsBean> comics;
        public MyAdapter(List<Data.DataBean.ComicsBean> comics) {
            this.comics=comics;
        }

        @Override
        public int getCount() {
            return comics.size();
        }

        @Override
        public Object getItem(int position) {
            return comics.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) {
            int type = getItemViewType(position);
            ViewHolder holder=null;
            ViewHolder2 holder2=null;
            switch (type){
                case 0:
                    if (convertView==null){
                        convertView=convertView.inflate(getActivity(),R.layout.listview_item1,null);
                        holder=new ViewHolder();
                        holder.textView= (TextView) convertView.findViewById(R.id.showText1);
                        holder.image= (ImageView) convertView.findViewById(R.id.showImage1);
                        convertView.setTag(holder);
                    }else{
                        holder= (ViewHolder) convertView.getTag();
                    }
                    break;
                case 1:
                    if (convertView==null){
                        convertView=convertView.inflate(getActivity(),R.layout.listview_item2,null);
                        holder2=new ViewHolder2();
                        holder2.textView= (TextView) convertView.findViewById(R.id.showText2);
                        holder2.image= (ImageView) convertView.findViewById(R.id.showImage2);
                        convertView.setTag(holder2);
                    }else{
                        holder2= (ViewHolder2) convertView.getTag();
                    }
                    break;
            }
            switch (type){
                case 0:
                    holder.textView.setText(comics.get(position).getTitle());
                    getImage(comics.get(position).getCover_image_url(),holder.image);
                    break;
                case 1:
                    holder2.textView.setText(comics.get(position).getTitle());
                    getImage(comics.get(position).getCover_image_url(),holder2.image);
                    break;
            }
            return convertView;
        }
    }
    class ViewHolder{
        private TextView textView;
        private ImageView image;
    }
    class ViewHolder2{
        private TextView textView;
        private ImageView image;
    }
    private void getImage(String path,ImageView imageView){
        DisplayImageOptions options=new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .build();
        ImageLoader.getInstance().displayImage(path,imageView,options);
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值