build.gradle中导入依赖
implementation 'com.github.andyoom:draggrid:v1.0.1'
工程的build.gradle中导入依赖
allprojects {
repositories {
google()
jcenter()
//上面是原来就有的
maven {url "https://jitpack.io"}
}
}
权限
<!-- 在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"/>
XML布局
<?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/tab"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
></android.support.design.widget.TabLayout>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:textSize="40sp"
/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
></android.support.v4.view.ViewPager>
</LinearLayout>
activity中的代码
public class MainActivity extends AppCompatActivity {
private TabLayout tab;
private TextView text;
private ViewPager viewPager;
private ArrayList<Fragment> fragments=new ArrayList<Fragment>();
private ArrayList<ChannelBean> channelBeans=new ArrayList<ChannelBean>();
private MyFragmentAdapter adapter;
private String stringExtra;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView(savedInstanceState);
initData();
}
private void initView(Bundle savedInstanceState) {
tab = findViewById(R.id.tab);
text = findViewById(R.id.text);
viewPager = findViewById(R.id.viewpager);
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ChannelActivity提供的打卡自己的方法;
ChannelActivity.startChannelActivity(MainActivity.this,channelBeans);
}
});
}
private void initData() {
channelBeans.add(new ChannelBean("热点",true));
channelBeans.add(new ChannelBean("关注",true));
channelBeans.add(new ChannelBean("北京",true));
channelBeans.add(new ChannelBean("房价",true));
channelBeans.add(new ChannelBean("旅游",false));
channelBeans.add(new ChannelBean("条目一",false));
channelBeans.add(new ChannelBean("条目二",false));
fragments.add(new FragmentOne());
fragments.add(new FragmentTwo());
fragments.add(new FragmentThree());
fragments.add(new FragmentOne());
fragments.add(new FragmentTwo());
fragments.add(new FragmentThree());
fragments.add(new FragmentOne());
for (int i=0;i<channelBeans.size();i++) {
if (channelBeans.get(i).isSelect()) {
String name = channelBeans.get(i).getName();
tab.addTab(tab.newTab().setText(name));
}
}
adapter=new MyFragmentAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
tab.setupWithViewPager(viewPager);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==ChannelActivity.REQUEST_CODE&&resultCode==ChannelActivity.RESULT_CODE){
stringExtra = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);//得到栏目管理的结果
tab.removeAllTabs();//清空之前的栏目
//把新选择的栏目结果更新到tablayout上
Gson gson=new Gson();
//进行json解析
Type type=new TypeToken<ArrayList<ChannelBean>>(){}.getType();
channelBeans = gson.fromJson(stringExtra, type);
for (int i=0;i<channelBeans.size();i++){
if(channelBeans.get(i).isSelect()){
try {
tab_top.addTab(tab_top.newTab().setText(channelBeans.get(i).getName()));
}catch (Exception e){
}
}
}
//因为集合中的Fragment数量改变了;
viewPager.getAdapter().notifyDataSetChanged();
}
}
class MyFragmentAdapter extends FragmentPagerAdapter {
public MyFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
int count=0;
for (int i=0;i<channelBeans.size();i++){
if(channelBeans.get(i).isSelect()){
count++;
}
}
return count;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return channelBeans.get(position).getName();
}
}
}
在Fragment中有点变化
@Override
protected void initView(View view) {
tab_top = view.findViewById(R.id.tab_top);
view_pager = view.findViewById(R.id.view_pager);
textView = view.findViewById(R.id.text_view);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// / ChannelActivity.startChannelActivity((AppCompatActivity) getActivity(),channelBeans);
Gson gson = new Gson();
String jsonArray = gson.toJson(channelBeans);
Intent intent = new Intent(getActivity(), ChannelActivity.class);
intent.putExtra(RESULT_JSON_KEY, jsonArray);
startActivityForResult(intent, REQUEST_CODE);
}
});
}