版权声明:本文为博主原创文章,未经博主允许不得转载。 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
//更新适配器;
} }
}
-
//mainActivity的布局文件
-
<?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
xmlns:app=
"http://schemas.android.com/apk/res-auto"
-
xmlns:tools=
"http://schemas.android.com/tools"
-
android:layout_width=
"match_parent"
-
android:layout_height=
"match_parent"
-
tools:context=
".MainActivity"
-
android:orientation=
"vertical">
-
-
<LinearLayout
-
android:layout_width=
"match_parent"
-
android:layout_height=
"wrap_content"
-
android:orientation=
"horizontal"
-
>
-
-
<android.support.design.widget.TabLayout
-
android:id=
"@+id/tb"
-
android:layout_width=
"0dp"
-
android:layout_height=
"wrap_content"
-
android:layout_weight=
"1"
-
/>
-
-
<Button
-
android:id=
"@+id/btn"
-
android:layout_width=
"wrap_content"
-
android:layout_height=
"wrap_content"
-
-
android:text=
"+"/>
-
</LinearLayout>
-
-
<android.support.v4.view.ViewPager
-
android:id=
"@+id/vp"
-
android:layout_width=
"match_parent"
-
android:layout_height=
"0dp"
-
android:layout_weight=
"1"
-
/>
-
-
-
</LinearLayout>
-
//MainActivity
-
package wzq.com.pindao;
-
-
import android.content.Intent;
-
import android.os.Bundle;
-
import android.support.annotation.Nullable;
-
import android.support.design.widget.TabLayout;
-
import android.support.v4.app.Fragment;
-
import android.support.v4.app.FragmentManager;
-
import android.support.v4.app.FragmentPagerAdapter;
-
import android.support.v4.view.ViewPager;
-
import android.support.v7.app.AppCompatActivity;
-
import android.util.Log;
-
import android.view.View;
-
import android.widget.Button;
-
-
import com.andy.library.ChannelActivity;
-
import com.andy.library.ChannelBean;
-
import com.google.gson.Gson;
-
import com.google.gson.reflect.TypeToken;
-
-
import java.lang.reflect.Type;
-
import java.util.ArrayList;
-
-
public
class MainActivity extends AppCompatActivity {
-
TabLayout tb;
-
ViewPager vp;
-
Button btn;
-
ArrayList<Fragment> fragmentList =
new ArrayList<Fragment>();
-
ArrayList<ChannelBean> channelBeanList =
new ArrayList<ChannelBean>();
-
MPagerAdapter mPagerAdapter;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
initVeiw();
-
initData();
-
-
-
}
-
-
private void initVeiw() {
-
tb = (TabLayout) findViewById(R.id.tb);
-
vp = (ViewPager) findViewById(R.id.vp);
-
btn = (Button) findViewById(R.id.btn);
-
btn.setOnClickListener(
new View.OnClickListener() {
-
@Override
-
public void onClick(View view) {
-
//ChannelActivity提供的打卡自己的方法;
-
ChannelActivity.startChannelActivity(MainActivity.
this,channelBeanList);
-
}
-
});
-
-
}
-
-
private void initData() {
-
channelBeanList.add(
new ChannelBean(
"热点",
true));
-
channelBeanList.add(
new ChannelBean(
"北京",
true));
-
channelBeanList.add(
new ChannelBean(
"房价",
true));
-
channelBeanList.add(
new ChannelBean(
"旅游",
false));
-
channelBeanList.add(
new ChannelBean(
"条目1",
false));
-
channelBeanList.add(
new ChannelBean(
"条目2",
false));
-
-
for (
int i =
0; i < channelBeanList.size(); i++) {
-
if (channelBeanList.get(i).isSelect()) {
-
String tabName = channelBeanList.get(i).getName();
-
tb.addTab(tb.newTab().setText(tabName));
-
if (i ==
0) {
-
fragmentList.add(
new VP_Fragment1());
-
}
else
if(i ==
1){
-
fragmentList.add(
new VP_Fragment2());
-
}
else
if(i ==
2){
-
fragmentList.add(
new VP_Fragment3());
-
}
else {
-
fragmentList.add(
new BlankFragment());
-
}
-
}
-
}
-
-
mPagerAdapter =
new MPagerAdapter(getSupportFragmentManager());
-
vp.setAdapter(mPagerAdapter);
-
tb.setupWithViewPager(vp);
-
}
-
-
-
@Override
-
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-
super.onActivityResult(requestCode, resultCode, data);
-
-
String json = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);
-
Log.e(
"wzq",json);
-
Type type =
new TypeToken<ArrayList<ChannelBean>>() {}.getType();
-
Gson gson =
new Gson();
-
channelBeanList = gson.fromJson(json, type);
-
tb.removeAllTabs();
-
fragmentList.clear();
-
-
for (
int i =
0; i < channelBeanList.size(); i++) {
-
ChannelBean channelBean = channelBeanList.get(i);
-
if (channelBean.isSelect()) {
-
String tabName = channelBeanList.get(i).getName();
-
tb.addTab(tb.newTab().setText(tabName));
-
-
if (
"热点".equals(channelBean.getName())) {
-
fragmentList.add(
new VP_Fragment1());
-
}
else
if(
"北京".equals(channelBean.getName())){
-
fragmentList.add(
new VP_Fragment2());
-
}
else
if(
"房价".equals(channelBean.getName())){
-
fragmentList.add(
new VP_Fragment3());
-
}
else {
-
fragmentList.add(
new BlankFragment());
-
}
-
}
-
-
}
-
//因为集合中的Fragment数量改变了;
-
mPagerAdapter.notifyDataSetChanged();
-
-
-
}
-
-
class MPagerAdapter extends FragmentPagerAdapter {
-
-
-
public MPagerAdapter(FragmentManager fm) {
-
super(fm);
-
}
-
-
@Override
-
public Fragment getItem(int i) {
-
return fragmentList.get(i);
-
}
-
-
@Override
-
public int getCount() {
-
return fragmentList.size();
-
}
-
-
@Nullable
-
@Override
-
public CharSequence getPageTitle(int position) {
-
-
return channelBeanList.get(position).getName();
-
}
-
}
-
-
-
}
VP_Fragment1
-
package wzq.com.pindao;
-
-
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.TextView;
-
-
-
public
class VP_Fragment1 extends Fragment {
-
-
@Nullable
-
@Override
-
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
TextView textView =
new TextView(getActivity());
-
Bundle bundle = getArguments();
-
// String name = bundle.getString("name");
-
double random = Math.random();
-
textView.setText(
"我是第一个tab");
-
return textView;
-
}
-
-
//静态创建自己实例的方法, 并且传递值过来,返回自己;
-
public static VP_Fragment1 getInstances(String name) {
-
VP_Fragment1 blankFragment =
new VP_Fragment1();
-
Bundle bundle =
new Bundle();
-
bundle.putString(
"name", name);
-
blankFragment.setArguments(bundle);
-
return blankFragment;
-
-
}
-
-
}
VP_Fragment2
-
package wzq.com.pindao;
-
-
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.TextView;
-
-
-
public
class VP_Fragment2 extends Fragment {
-
-
@Nullable
-
@Override
-
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
TextView textView =
new TextView(getActivity());
-
Bundle bundle = getArguments();
-
// String name = bundle.getString("name");
-
double random = Math.random();
-
textView.setText(
"我是第二个tab");
-
return textView;
-
}
-
-
//静态创建自己实例的方法, 并且传递值过来,返回自己;
-
public static VP_Fragment2 getInstances(String name) {
-
VP_Fragment2 blankFragment =
new VP_Fragment2();
-
Bundle bundle =
new Bundle();
-
bundle.putString(
"name", name);
-
blankFragment.setArguments(bundle);
-
return blankFragment;
-
-
}
-
-
}
VP_Fragment3
-
package wzq.com.pindao;
-
-
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.TextView;
-
-
-
public
class VP_Fragment3 extends Fragment {
-
-
@Nullable
-
@Override
-
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
TextView textView =
new TextView(getActivity());
-
Bundle bundle = getArguments();
-
// String name = bundle.getString("name");
-
double random = Math.random();
-
textView.setText(
"我是第三个tab");
-
return textView;
-
}
-
-
//静态创建自己实例的方法, 并且传递值过来,返回自己;
-
public static VP_Fragment3 getInstances(String name) {
-
VP_Fragment3 blankFragment =
new VP_Fragment3();
-
Bundle bundle =
new Bundle();
-
bundle.putString(
"name", name);
-
blankFragment.setArguments(bundle);
-
return blankFragment;
-
-
}
-
-
}
欢迎下载使用
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包,就可以解决问题了。