频道管理
主页效果图
频道管理页面
包结构
具体使用
一、首先在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包,就可以解决问题了。