频道管理

				版权声明:本文为博主原创文章,未经博主允许不得转载。					https://blog.csdn.net/hubianyu/article/details/79419993				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-db05db230f.css">
					<div class="htmledit_views" id="content_views">
            <p><strong>频道管理</strong></p>

主页效果图

 

频道管理页面

 

包结构

 

具体使用

一、首先在project项目下的的build.gradle下注册

1.  //在allprojects下进项注册

allprojects {

    repositories {

         jcenter()

         //下面这句maver才是加上的,上面的自带 的

        maven {url "https://jitpack.io"}

}

2、然后在app下的build.gradle中导入依赖

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

 

 

3、然后在Activity中使用了,只要用集合将数据添加就可以了

 

点击按钮,进入频道管理

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //ChannelActivity提供的打卡自己的方法;
        ChannelActivity.startChannelActivity(MainActivity.this,channelBeanList);
    }
});

 

打开频道管理后, 会把管理好的频道数据用json返回,返回到onActivityResult()方法;

 

5、然后再回调一下

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode==ChannelActivity.REQUEST_CODE&&resultCode==ChannelActivity.RESULT_CODE) {

jsonStr = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);

// 在这里清空tab和对应的frgment集合,

// 重新循环添加管理后的tab和fragment

//更新适配器;

} }

}


 
 
  1. //mainActivity的布局文件
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:app= "http://schemas.android.com/apk/res-auto"
  5. xmlns:tools= "http://schemas.android.com/tools"
  6. android:layout_width= "match_parent"
  7. android:layout_height= "match_parent"
  8. tools:context= ".MainActivity"
  9. android:orientation= "vertical">
  10. <LinearLayout
  11. android:layout_width= "match_parent"
  12. android:layout_height= "wrap_content"
  13. android:orientation= "horizontal"
  14. >
  15. <android.support.design.widget.TabLayout
  16. android:id= "@+id/tb"
  17. android:layout_width= "0dp"
  18. android:layout_height= "wrap_content"
  19. android:layout_weight= "1"
  20. />
  21. <Button
  22. android:id= "@+id/btn"
  23. android:layout_width= "wrap_content"
  24. android:layout_height= "wrap_content"
  25. android:text= "+"/>
  26. </LinearLayout>
  27. <android.support.v4.view.ViewPager
  28. android:id= "@+id/vp"
  29. android:layout_width= "match_parent"
  30. android:layout_height= "0dp"
  31. android:layout_weight= "1"
  32. />
  33. </LinearLayout>

 
 
  1. //MainActivity
  2. package wzq.com.pindao;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.support.annotation.Nullable;
  6. import android.support.design.widget.TabLayout;
  7. import android.support.v4.app.Fragment;
  8. import android.support.v4.app.FragmentManager;
  9. import android.support.v4.app.FragmentPagerAdapter;
  10. import android.support.v4.view.ViewPager;
  11. import android.support.v7.app.AppCompatActivity;
  12. import android.util.Log;
  13. import android.view.View;
  14. import android.widget.Button;
  15. import com.andy.library.ChannelActivity;
  16. import com.andy.library.ChannelBean;
  17. import com.google.gson.Gson;
  18. import com.google.gson.reflect.TypeToken;
  19. import java.lang.reflect.Type;
  20. import java.util.ArrayList;
  21. public class MainActivity extends AppCompatActivity {
  22. TabLayout tb;
  23. ViewPager vp;
  24. Button btn;
  25. ArrayList<Fragment> fragmentList = new ArrayList<Fragment>();
  26. ArrayList<ChannelBean> channelBeanList = new ArrayList<ChannelBean>();
  27. MPagerAdapter mPagerAdapter;
  28. @Override
  29. protected void onCreate(Bundle savedInstanceState) {
  30. super.onCreate(savedInstanceState);
  31. setContentView(R.layout.activity_main);
  32. initVeiw();
  33. initData();
  34. }
  35. private void initVeiw() {
  36. tb = (TabLayout) findViewById(R.id.tb);
  37. vp = (ViewPager) findViewById(R.id.vp);
  38. btn = (Button) findViewById(R.id.btn);
  39. btn.setOnClickListener( new View.OnClickListener() {
  40. @Override
  41. public void onClick(View view) {
  42. //ChannelActivity提供的打卡自己的方法;
  43. ChannelActivity.startChannelActivity(MainActivity. this,channelBeanList);
  44. }
  45. });
  46. }
  47. private void initData() {
  48. channelBeanList.add( new ChannelBean( "热点", true));
  49. channelBeanList.add( new ChannelBean( "北京", true));
  50. channelBeanList.add( new ChannelBean( "房价", true));
  51. channelBeanList.add( new ChannelBean( "旅游", false));
  52. channelBeanList.add( new ChannelBean( "条目1", false));
  53. channelBeanList.add( new ChannelBean( "条目2", false));
  54. for ( int i = 0; i < channelBeanList.size(); i++) {
  55. if (channelBeanList.get(i).isSelect()) {
  56. String tabName = channelBeanList.get(i).getName();
  57. tb.addTab(tb.newTab().setText(tabName));
  58. if (i == 0) {
  59. fragmentList.add( new VP_Fragment1());
  60. } else if(i == 1){
  61. fragmentList.add( new VP_Fragment2());
  62. } else if(i == 2){
  63. fragmentList.add( new VP_Fragment3());
  64. } else {
  65. fragmentList.add( new BlankFragment());
  66. }
  67. }
  68. }
  69. mPagerAdapter = new MPagerAdapter(getSupportFragmentManager());
  70. vp.setAdapter(mPagerAdapter);
  71. tb.setupWithViewPager(vp);
  72. }
  73. @Override
  74. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  75. super.onActivityResult(requestCode, resultCode, data);
  76. String json = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);
  77. Log.e( "wzq",json);
  78. Type type = new TypeToken<ArrayList<ChannelBean>>() {}.getType();
  79. Gson gson = new Gson();
  80. channelBeanList = gson.fromJson(json, type);
  81. tb.removeAllTabs();
  82. fragmentList.clear();
  83. for ( int i = 0; i < channelBeanList.size(); i++) {
  84. ChannelBean channelBean = channelBeanList.get(i);
  85. if (channelBean.isSelect()) {
  86. String tabName = channelBeanList.get(i).getName();
  87. tb.addTab(tb.newTab().setText(tabName));
  88. if ( "热点".equals(channelBean.getName())) {
  89. fragmentList.add( new VP_Fragment1());
  90. } else if( "北京".equals(channelBean.getName())){
  91. fragmentList.add( new VP_Fragment2());
  92. } else if( "房价".equals(channelBean.getName())){
  93. fragmentList.add( new VP_Fragment3());
  94. } else {
  95. fragmentList.add( new BlankFragment());
  96. }
  97. }
  98. }
  99. //因为集合中的Fragment数量改变了;
  100. mPagerAdapter.notifyDataSetChanged();
  101. }
  102. class MPagerAdapter extends FragmentPagerAdapter {
  103. public MPagerAdapter(FragmentManager fm) {
  104. super(fm);
  105. }
  106. @Override
  107. public Fragment getItem(int i) {
  108. return fragmentList.get(i);
  109. }
  110. @Override
  111. public int getCount() {
  112. return fragmentList.size();
  113. }
  114. @Nullable
  115. @Override
  116. public CharSequence getPageTitle(int position) {
  117. return channelBeanList.get(position).getName();
  118. }
  119. }
  120. }

 

VP_Fragment1

 
 
  1. package wzq.com.pindao;
  2. import android.os.Bundle;
  3. import android.support.annotation.Nullable;
  4. import android.support.v4.app.Fragment;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.TextView;
  9. public class VP_Fragment1 extends Fragment {
  10. @Nullable
  11. @Override
  12. public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  13. TextView textView = new TextView(getActivity());
  14. Bundle bundle = getArguments();
  15. // String name = bundle.getString("name");
  16. double random = Math.random();
  17. textView.setText( "我是第一个tab");
  18. return textView;
  19. }
  20. //静态创建自己实例的方法, 并且传递值过来,返回自己;
  21. public static VP_Fragment1 getInstances(String name) {
  22. VP_Fragment1 blankFragment = new VP_Fragment1();
  23. Bundle bundle = new Bundle();
  24. bundle.putString( "name", name);
  25. blankFragment.setArguments(bundle);
  26. return blankFragment;
  27. }
  28. }
VP_Fragment2

 
 
  1. package wzq.com.pindao;
  2. import android.os.Bundle;
  3. import android.support.annotation.Nullable;
  4. import android.support.v4.app.Fragment;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.TextView;
  9. public class VP_Fragment2 extends Fragment {
  10. @Nullable
  11. @Override
  12. public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  13. TextView textView = new TextView(getActivity());
  14. Bundle bundle = getArguments();
  15. // String name = bundle.getString("name");
  16. double random = Math.random();
  17. textView.setText( "我是第二个tab");
  18. return textView;
  19. }
  20. //静态创建自己实例的方法, 并且传递值过来,返回自己;
  21. public static VP_Fragment2 getInstances(String name) {
  22. VP_Fragment2 blankFragment = new VP_Fragment2();
  23. Bundle bundle = new Bundle();
  24. bundle.putString( "name", name);
  25. blankFragment.setArguments(bundle);
  26. return blankFragment;
  27. }
  28. }
VP_Fragment3

 
 
  1. package wzq.com.pindao;
  2. import android.os.Bundle;
  3. import android.support.annotation.Nullable;
  4. import android.support.v4.app.Fragment;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.TextView;
  9. public class VP_Fragment3 extends Fragment {
  10. @Nullable
  11. @Override
  12. public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  13. TextView textView = new TextView(getActivity());
  14. Bundle bundle = getArguments();
  15. // String name = bundle.getString("name");
  16. double random = Math.random();
  17. textView.setText( "我是第三个tab");
  18. return textView;
  19. }
  20. //静态创建自己实例的方法, 并且传递值过来,返回自己;
  21. public static VP_Fragment3 getInstances(String name) {
  22. VP_Fragment3 blankFragment = new VP_Fragment3();
  23. Bundle bundle = new Bundle();
  24. bundle.putString( "name", name);
  25. blankFragment.setArguments(bundle);
  26. return blankFragment;
  27. }
  28. }

欢迎下载使用

github地址:https://github.com/wzqjava/pindao.git

 

注意:

如果run之前程序报错如:Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.

即依赖冲突,根据报错的详细信息查找冲突的类。

例如:

报错:Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/gson/annotations

这时候我们可以发现

com/google/gson/annotations/Expose.class

最后面有一个Expose.class

我们可以通过Search Everywhere去定位这个类(默认快捷键是双击shift)。

全局搜索相同类

全局搜索相同类

看,通过搜索的确发现了两个一模一样的类,而且来自不同的依赖,而重复的类库正是gson。

然后我们只要删除一个架包或者依赖就可以了,最好是删除外面的单独架包,比如我们自己导入的Gson包,就可以解决问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值