您的位置:首页 > 其它

仿今日头条的频道管理

2017-08-19 09:38 155 查看

仿今日头条的频道管理

这里集成了第三方的库:

  
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐