实现频道管理

先添加依赖

         compile 'com.github.andyoom:draggrid:v1.0.1'
       在: allprojects {
                repositories {
                    jcenter()
                    maven {url "http://jitpack.io"}
                }
        }
ArrayList<ChannelBean>  cblist = new ArrayList<>();
         ChannelBean cb=new ChannelBean(name,isSelect);
                        cblist.add(cb);
  ChannelActivity.startChannelActivity(MainActivity.this,cblist);
例:今日头条的tabhost的条目添加,到频道页面
mainactivity{//主页方法

ArrayList<Fragment> fraglist = new ArrayList<>();
//与头条上边文字对应的Fragment对象
fraglist.add( new F1(Api. TOUTIAO ) );
fraglist.add( new F2(Api. SHEHUI ) );
fraglist.add( new F3(Api. GUOJI ) );
fraglist.add( new F4(Api. GUONEI ) );
fraglist.add( new F5(Api. YULE));
fraglist.add( new F6(Api. JUNSHI));
fraglist.add( new F7(Api. KEJI));
fraglist.add( new F8(Api. CAIJING));
fraglist.add( new F9(Api. SHISHANG));
ArrayList<TopBean> list = new ArrayList<>();//要显示在头条上边的小标题
String re= dao.select( "pindao");
//查询数据库
if(re== null){ // 第一次使用的时候,判断数据库没有存储到数据
list.add( new TopBean( "1", " 推荐 ", true));
list.add( new TopBean( "2", " 社会 ", true));
list.add( new TopBean( "3", " 国际 ", true));
list.add( new TopBean( "4", " 国内 ", true));
list.add( new TopBean( "5", " 娱乐 ", true));
list.add( new TopBean( "6", " 军事 ", true));
list.add( new TopBean( "7", " 科技 ", true));
list.add( new TopBean( "8", " 财经 ", true));
list.add( new TopBean( "9", " 时尚 ", true));
horizontal_tabhost.load( list, fraglist);}
else{
// 返回时候,第二次调用展示数据库信息
list.clear();//清除之前的数据,显示最新的
ArrayList<Fragment> fl= new ArrayList<>(); //新的Fragment集合,存放新数据对应的Fragment
try {
JSONArray arr= new JSONArray(re);//解析过程
for ( int i = 0; i <arr.length() ; i++) { 
  JSONObject oo= (JSONObject) arr.get(i);
  String name=oo.getString( "name"); 
  booleanbo=oo.getBoolean( "isSelect");//判断返回的对象中,如果为true,代表保留
  if(bo){ TopBean to= newTopBean(i+ "",name,bo);
 
  list.add(to);//添加到数据集合中 
  fl.add( fraglist.get(i));//与之对应的Fragment对象集合
  } }
  horizontal_tabhost.load( list, fl);//将数据传递给自定义控件 
 } catch (JSONException e) 
 e.printStackTrace();
 }}

}

private void pindaoUtils() {
cblist = new ArrayList<>();
String result= dao.select( "pindao");//从数据库中查询数据
if(result== null){//第一次,数据库信息为空,添加头条里面的信息到频道中
for ( int i = 0; i < list.size(); i++) {
TopBean tb= list.get(i);
ChannelBean cb= new ChannelBean(tb. name,tb. state);
cblist.add(cb);
}
} else{//否则,从数据库中解析数据,添加到频道中
try {
JSONArray arr= new JSONArray(result);
for ( int i = 0; i <arr.length() ; i++) {
JSONObject oo= (JSONObject) arr.get(i);
String name=oo.getString( "name");
boolean bo=oo.getBoolean( "isSelect");
ChannelBean be= new ChannelBean(name,bo);
cblist.add(be);//将频道ChannelBean对象放进集合
}
} catch (JSONException e) {
e.printStackTrace();
}
}
ChannelActivity. startChannelActivity(MainActivity. this, cblist);//调用频道类的方法,将数据放进频道中处理
}
当在频道界面,返回的时候,实现头条里面的数据与频道里面选择的数据保持一致的操作,这时有个回调接口的方法,接收频道最后保留的信息
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode== 101){//判断返回的代码号
String result_json_key = data.getStringExtra( "json");//获取传递过来的json串数据
// 重新刷新 头 tabhost
dao.remove( "pindao"); // 清除数据库中之前保存的频道信息,更新为最新的,刚才所选择后的频道信息
dao.insert( "pindao",result_json_key); // 添加到数据库
list.clear(); // 清除之前的对象集合
ArrayList<Fragment> fflist= new ArrayList<>();
try {
JSONArray arr= new JSONArray(result_json_key);
for ( int i = 0; i <arr.length() ; i++) {
JSONObject oo= (JSONObject) arr.get(i);
String name=oo.getString( "name");
boolean bo=oo.getBoolean( "isSelect");//判断如果是true(就是频道中选中的一些频道信息)
if(bo)
{
fflist.add( fraglist.get(i));//与选择的数据相对应的Fragment
TopBean top= new TopBean(name,bo);
list.add(top);//选择数据封装成对象放进集合 中,给自定义控件设置信息,更改头条条目的信息
}
}
horizontal_tabhost.clear();//清除之前自定义控件中的控件信息,避免发生重复,布局中removeAllView();的操作
horizontal_tabhost.load( list, fflist);//重新给自定义控件设置值
} catch (JSONException e) {
e.printStackTrace();
}
}
}



添加maven 开元代码里面的    url "http://jitpack.io"(在工程的build.gradle里面设置)

实现代码

最后,将数据放进人家的频道类里面

 
 
 
 
 
 
 
 


猜你喜欢

转载自blog.csdn.net/zqj861791241/article/details/77898946