Skip to content

Commit 2405481

Browse files
author
ckr
committed
first commit
1 parent 4760058 commit 2405481

20 files changed

+823
-13
lines changed

app/build.gradle

+6
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,11 @@ dependencies {
2525
api commonDepend.appcompat_v7
2626
api commonDepend.recyclerview_v7
2727
api commonDepend.constraint_layout
28+
2829
implementation project(':treeselector')
30+
// butterknife
31+
implementation commonDepend.butterknife
32+
annotationProcessor commonDepend.butterknife_compiler
33+
implementation commonDepend.pageView
34+
2935
}

app/src/main/java/com/ckr/treeselector/MainActivity.java

+15
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,28 @@
22

33

44
import android.os.Bundle;
5+
import android.support.v4.app.FragmentManager;
56
import android.support.v7.app.AppCompatActivity;
67

8+
/**
9+
* @author ckr
10+
*/
711
public class MainActivity extends AppCompatActivity {
12+
private MainFragment mainFragment;
813

914
@Override
1015
protected void onCreate(Bundle savedInstanceState) {
1116
super.onCreate(savedInstanceState);
1217
setContentView(R.layout.activity_main);
18+
FragmentManager fragmentManager = getSupportFragmentManager();
19+
if (savedInstanceState == null) {
20+
mainFragment = MainFragment.newInstance();
21+
fragmentManager.beginTransaction()
22+
.add(R.id.main_container, mainFragment, MainFragment.class.getSimpleName())
23+
.commit();
24+
} else {
25+
fragmentManager.beginTransaction().show(mainFragment = (MainFragment) fragmentManager.findFragmentByTag(MainFragment.class.getSimpleName()))
26+
.commit();
27+
}
1328
}
1429
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
package com.ckr.treeselector;
2+
3+
import android.content.Context;
4+
import android.os.Bundle;
5+
import android.support.annotation.NonNull;
6+
import android.support.design.widget.BottomNavigationView;
7+
import android.support.v4.view.ViewPager;
8+
import android.support.v7.widget.AppCompatCheckBox;
9+
import android.support.v7.widget.LinearLayoutManager;
10+
import android.support.v7.widget.PageRecyclerView;
11+
import android.support.v7.widget.RecyclerView;
12+
import android.util.Log;
13+
import android.view.Menu;
14+
import android.view.MenuItem;
15+
import android.view.View;
16+
import android.widget.TextView;
17+
18+
import com.ckr.pageview.adapter.BasePageAdapter;
19+
import com.ckr.pageview.view.PageView;
20+
import com.ckr.treeselector.common.AppFragment;
21+
import com.ckr.treeselector.common.BaseAdapter;
22+
import com.ckr.treeselector.common.BaseFragment;
23+
24+
import java.util.ArrayList;
25+
import java.util.List;
26+
27+
import butterknife.BindView;
28+
29+
/**
30+
* @author : ckr
31+
* @date : 2020/4/24 11:28
32+
* @description :
33+
*/
34+
public class MainFragment extends AppFragment {
35+
private static final String TAG = "MainFragment";
36+
@BindView(R.id.pageView)
37+
PageView mPageView;
38+
@BindView(R.id.navigationView)
39+
BottomNavigationView mBottomNavigationView;
40+
private MainAdapter mMainAdapter;
41+
private int mPosition;
42+
43+
public static MainFragment newInstance() {
44+
Bundle args = new Bundle();
45+
MainFragment fragment = new MainFragment();
46+
fragment.setArguments(args);
47+
return fragment;
48+
}
49+
50+
@Override
51+
protected int getLayoutId() {
52+
return R.layout.fragment_main;
53+
}
54+
55+
@Override
56+
protected void init() {
57+
Log.d(TAG, "init: ");
58+
mPosition = 0;
59+
mPageView.addOnPageChangeListener(new PageRecyclerView.OnPageChangeListener() {
60+
@Override
61+
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
62+
Log.d(TAG, "onPageScrolled: position=" + position + ",positionOffset=" + positionOffset + ",positionOffsetPixels=" + positionOffsetPixels);
63+
}
64+
65+
@Override
66+
public void onPageSelected(int position) {
67+
Log.d(TAG, "onPageSelected: position=" + position + ",mPosition=" + mPosition);
68+
if (mPosition != position) {
69+
Menu menu = mBottomNavigationView.getMenu();
70+
MenuItem item = menu.getItem(position);
71+
item.setChecked(true);
72+
mPosition = position;
73+
}
74+
}
75+
76+
@Override
77+
public void onPageScrollStateChanged(int state) {
78+
Log.d(TAG, "onPageScrollStateChanged: state=" + state);
79+
80+
}
81+
});
82+
83+
mBottomNavigationView.inflateMenu(R.menu.menu_main);
84+
mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
85+
@Override
86+
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
87+
int itemId = menuItem.getItemId();
88+
Log.d(TAG, "onNavigationItemSelected: itemId=" + itemId + ",mPosition=" + mPosition);
89+
switch (itemId) {
90+
case R.id.main_multi_check:
91+
menuItem.setChecked(true);
92+
if (mPosition != 0) {
93+
if (mPageView != null) {
94+
mPageView.setCurrentItem(mPosition = 0, true);
95+
}
96+
}
97+
break;
98+
case R.id.main_single_check:
99+
menuItem.setChecked(true);
100+
if (mPosition != 1) {
101+
if (mPageView != null) {
102+
mPageView.setCurrentItem(mPosition = 1, true);
103+
}
104+
}
105+
break;
106+
default:
107+
break;
108+
}
109+
return mPosition != -1;
110+
}
111+
});
112+
113+
mMainAdapter = new MainAdapter(getContext());
114+
mPageView.setAdapter(mMainAdapter);
115+
Menu menu = mBottomNavigationView.getMenu();
116+
int size = menu.size();
117+
Log.d(TAG, "init: size=" + size);
118+
List<MainType> data = new ArrayList<>(size);
119+
for (int i = 0; i < size; i++) {
120+
MainType mainType = new MainType();
121+
mainType.index = i;
122+
mainType.layoutId = R.layout.layout_recycler;
123+
mainType.title = menu.getItem(i).getTitle() + "";
124+
data.add(mainType);
125+
}
126+
mMainAdapter.updateAll(data);
127+
}
128+
129+
130+
class MainAdapter extends BasePageAdapter<MainType, MainAdapter.MainHolder> {
131+
132+
133+
public MainAdapter(Context mContext) {
134+
super(mContext);
135+
}
136+
137+
@Override
138+
protected int getLayoutId(int viewType) {
139+
MainType mainType = mTargetData.get(viewType);
140+
if (mainType != null) {
141+
return mainType.layoutId;
142+
}
143+
return 0;
144+
}
145+
146+
@Override
147+
public int getItemViewType(int position) {
148+
return position;
149+
}
150+
151+
@Override
152+
protected MainHolder getViewHolder(View itemView, int viewType) {
153+
return new MainHolder(itemView, viewType);
154+
}
155+
156+
@Override
157+
protected void convert(MainHolder holder, int originalPos, MainType originalItem, int adjustedPos, MainType adjustedItem) {
158+
if (adjustedItem != null) {
159+
String title = adjustedItem.title;
160+
holder.textView.setText(title);
161+
RecyclerView.Adapter adapter = holder.recyclerView.getAdapter();
162+
RecyclerView.LayoutManager layoutManager = holder.recyclerView.getLayoutManager();
163+
if (layoutManager == null) {
164+
holder.recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
165+
}
166+
Log.d(TAG, "convert: adapter=" + adapter);
167+
if (adapter == null) {
168+
holder.recyclerView.setAdapter(new TreeAdapter(mContext));
169+
}
170+
}
171+
}
172+
173+
class MainHolder extends RecyclerView.ViewHolder {
174+
175+
private final RecyclerView recyclerView;
176+
private final TextView textView;
177+
178+
public MainHolder(@NonNull View itemView, int viewType) {
179+
super(itemView);
180+
recyclerView = itemView.findViewById(R.id.recyclerView);
181+
textView = itemView.findViewById(R.id.textView);
182+
}
183+
}
184+
}
185+
186+
class TreeAdapter extends BaseAdapter<String, TreeAdapter.TreeHolder> {
187+
188+
189+
public TreeAdapter(Context mContext) {
190+
super(mContext);
191+
}
192+
193+
@Override
194+
public int getItemCount() {
195+
return 20;
196+
}
197+
198+
@Override
199+
protected int getLayoutId(int viewType) {
200+
return R.layout.item_tree;
201+
}
202+
203+
@Override
204+
protected TreeHolder getViewHolder(View itemView, int viewType) {
205+
return new TreeHolder(itemView);
206+
}
207+
208+
@Override
209+
protected void convert(TreeHolder holder, int position, String s) {
210+
holder.textView.setText("item " + position);
211+
}
212+
213+
class TreeHolder extends RecyclerView.ViewHolder {
214+
215+
private final TextView textView;
216+
private final AppCompatCheckBox checkbox;
217+
218+
public TreeHolder(@NonNull View itemView) {
219+
super(itemView);
220+
textView = itemView.findViewById(R.id.textView);
221+
checkbox = itemView.findViewById(R.id.checkbox);
222+
}
223+
}
224+
}
225+
226+
class MainType {
227+
int index;
228+
int layoutId;
229+
String type;
230+
String title;
231+
}
232+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.ckr.treeselector.common;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.CallSuper;
5+
import android.view.LayoutInflater;
6+
import android.view.View;
7+
import android.view.ViewGroup;
8+
9+
import butterknife.ButterKnife;
10+
import butterknife.Unbinder;
11+
12+
/**
13+
* @author : ckr
14+
* @date : 2019/10/12 14:21
15+
* @description :
16+
*/
17+
public abstract class AppFragment extends BaseFragment {
18+
protected static final String FLAG = "flag";
19+
protected static final String INDEX = "index";
20+
protected static final int DEFAULT_VALUE = -1;
21+
private Unbinder unbinder;
22+
protected View mRootView;
23+
24+
@Override
25+
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
26+
mRootView = super.onCreateView(inflater, container, savedInstanceState);
27+
if (mRootView != null) {
28+
unbinder = ButterKnife.bind(this, mRootView);
29+
}
30+
init();
31+
return mRootView;
32+
}
33+
34+
@CallSuper
35+
@Override
36+
public void onDestroyView() {
37+
super.onDestroyView();
38+
if (unbinder != null) {
39+
unbinder.unbind();
40+
}
41+
}
42+
43+
protected boolean mFlag = false;
44+
45+
public boolean getFlag() {
46+
return mFlag;
47+
}
48+
49+
public void setFlag(boolean mFlag) {
50+
this.mFlag = mFlag;
51+
}
52+
53+
public void lazyLoad(boolean isRefresh) {
54+
}
55+
}

0 commit comments

Comments
 (0)