Skip to content

Commit 402a847

Browse files
committed
DrawerLayout 侧滑菜单研究
1 parent 4322a97 commit 402a847

File tree

3 files changed

+199
-16
lines changed

3 files changed

+199
-16
lines changed

app/src/main/java/org/yh/yhframe/DemoActivity.java

Lines changed: 188 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,55 @@
66
import android.support.v4.view.GravityCompat;
77
import android.support.v4.widget.DrawerLayout;
88
import android.support.v7.app.ActionBarDrawerToggle;
9+
import android.support.v7.widget.LinearLayoutManager;
910
import android.view.Menu;
1011
import android.view.MenuItem;
1112
import android.view.View;
1213

1314
import org.yh.library.YHFragment;
15+
import org.yh.library.adapter.I_YHItemClickListener;
16+
import org.yh.library.okhttp.YHRequestFactory;
17+
import org.yh.library.okhttp.callback.HttpCallBack;
18+
import org.yh.library.ui.BindView;
19+
import org.yh.library.ui.YHViewInject;
20+
import org.yh.library.utils.Constants;
21+
import org.yh.library.utils.JsonUitl;
22+
import org.yh.library.utils.LogUtils;
23+
import org.yh.library.utils.StringUtils;
24+
import org.yh.library.view.YHRecyclerView;
25+
import org.yh.library.view.yhrecyclerview.ProgressStyle;
26+
import org.yh.yhframe.adapter.rv.MyRecyclerAdatpter;
1427
import org.yh.yhframe.base.BaseActiciy;
28+
import org.yh.yhframe.bean.JsonMenuModel;
29+
import org.yh.yhframe.bean.MenuModel;
30+
31+
import java.util.ArrayList;
32+
33+
import static org.yh.yhframe.app.MyApplication.HOME_HOST;
34+
1535

1636
public class DemoActivity extends BaseActiciy
17-
implements NavigationView.OnNavigationItemSelectedListener
37+
implements NavigationView.OnNavigationItemSelectedListener,I_YHItemClickListener<MenuModel>
1838
{
19-
View view;
2039
YHFragment oneFragment = null;
2140
YHFragment twoFragment = null;
2241
YHFragment threeFragment = null;
2342
YHFragment fourFragment = null;
2443
DrawerLayout drawer = null;
2544

45+
/**
46+
* 服务器端一共多少页
47+
*/
48+
private static int TOTAL_PAGE = 2;//假设10页
49+
@BindView(id = R.id.nav_view1)
50+
private YHRecyclerView mRecyclerView;
51+
private MyRecyclerAdatpter mAdapter;
52+
private int page = 0;
53+
ArrayList<MenuModel> data = null;
2654
@Override
2755
public void setRootView()
2856
{
2957
setContentView(R.layout.activity_demo);
30-
view = findViewById(R.id.drawer_layout);
3158
}
3259

3360
@Override
@@ -38,8 +65,62 @@ public void initData()
3865
twoFragment = new TwoFragment();
3966
threeFragment = new ThreeFragment();
4067
fourFragment = new FourFragment();
68+
data = new ArrayList<>();
4169
}
70+
private void getDataByLine()
71+
{
72+
// YHLoadingBar.make(empty_layout).show();
73+
YHRequestFactory.getRequestManger().get(HOME_HOST, "api/menu/menulist?page=" + page, null, new HttpCallBack()
74+
{
75+
@Override
76+
public void onSuccess(String t)
77+
{
78+
super.onSuccess(t);
79+
JsonMenuModel jsonMenuModel = JsonUitl.stringToTObject(t, JsonMenuModel.class);
80+
TOTAL_PAGE = jsonMenuModel.getTotalPage();
81+
String resultCode = jsonMenuModel.getResultCode();
82+
if ("0".equals(resultCode))
83+
{
84+
if (StringUtils.isEmpty(jsonMenuModel.getDatas()))
85+
{
86+
} else
87+
{
88+
data.addAll(jsonMenuModel.getDatas());
89+
mAdapter.setDatas(data);
90+
}
91+
} else
92+
{
93+
}
94+
//刷新完毕
95+
mRecyclerView.refreshComplete();
96+
}
97+
98+
@Override
99+
public void onFailure(int errorNo, String strMsg)
100+
{
101+
super.onFailure(errorNo, strMsg);
102+
LogUtils.e(TAG, strMsg);
103+
mAdapter.getDatas().clear();//必须在数据更新前清空,不能太早
104+
//刷新完毕
105+
mRecyclerView.refreshComplete();
106+
mAdapter.notifyDataSetChanged();
107+
}
42108

109+
@Override
110+
public void onFinish()
111+
{
112+
super.onFinish();
113+
// YHLoadingBar.cancel(empty_layout);
114+
Constants.Config.yhDBManager.insertAll(mAdapter.getDatas());
115+
// QueryBuilder<MenuModel> qb = new QueryBuilder<>(
116+
// MenuModel.class).where(MenuModel.COL_NAME + " =? ",
117+
// new Object[]
118+
// {"冬菇蒸滑鸡饭(不辣)"}).orderBy(MenuModel.COL_MENUID);
119+
// ArrayList<MenuModel> x =Constants.Config.yhDBManager.getDb().query(qb);
120+
// LogUtils.e(TAG,"fadfadsfa:" + x + "");
121+
}
122+
}, TAG);
123+
}
43124
@Override
44125
public void initWidget()
45126
{
@@ -56,11 +137,15 @@ public void onClick(View view)
56137
}
57138
});
58139

59-
drawer = bindView(R.id.drawer_layout);
60140
drawer = bindView(R.id.drawer_layout);
61141
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
62142
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
63143
drawer.addDrawerListener(toggle);
144+
//禁止手势滑动
145+
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
146+
//打开手势滑动
147+
//drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
148+
64149
toggle.syncState();
65150

66151
//导航图标
@@ -69,12 +154,84 @@ public void onClick(View view)
69154
NavigationView navigationView =bindView(R.id.nav_view);
70155
navigationView.setNavigationItemSelectedListener(this);
71156
navigationView.getMenu().getItem(0).setChecked(true);
157+
158+
// NavigationView navigationView1 =bindView(R.id.nav_view1);
159+
// navigationView1.setNavigationItemSelectedListener(this);
160+
// navigationView1.getMenu().getItem(0).setChecked(true);
161+
162+
163+
//lineartlayout
164+
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
165+
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
166+
167+
168+
//CardView
169+
// 两列
170+
//int spanCount = 3;
171+
//GridLayoutManager layoutManager = new GridLayoutManager(this,spanCount);
172+
//layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
173+
174+
175+
//StaggeredGridLayoutManager 不能加分割线
176+
// StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(spanCount,
177+
// StaggeredGridLayoutManager.VERTICAL);
178+
179+
180+
//分割线为LinearLayoutManager
181+
mRecyclerView.addItemDecoration(mRecyclerView.new YHItemDecoration());//分割线
182+
mRecyclerView.setLayoutManager(layoutManager);
183+
// mRecyclerView.setEmptyView(empty_layout);//没有数据的空布局
184+
185+
mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallPulseRise);//可以自定义下拉刷新的样式
186+
mRecyclerView.setLoadingMoreProgressStyle(ProgressStyle.SquareSpin);//可以自定义上拉加载的样式
187+
mRecyclerView.setFootViewText(getString(R.string.listview_loading), "我是有底线的。");
188+
mRecyclerView.setArrowImageView(R.mipmap.iconfont_downgrey);//箭头
189+
// View header = LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);
190+
// mRecyclerView.addHeaderView(header);
191+
// View header1 = LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);
192+
// mRecyclerView.addHeaderView(header1);
193+
// header1.setBackgroundColor(0xff556B2F);
194+
// View header2 = LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);
195+
// mRecyclerView.addHeaderView(header2);
196+
// header2.setBackgroundColor(0xff1874CD);
197+
198+
199+
mAdapter = new MyRecyclerAdatpter();
200+
mRecyclerView.setAdapter(mAdapter);
201+
mAdapter.setOnItemClickListener(this);
202+
mRecyclerView.setLoadingListener(new YHRecyclerView.LoadingListener()
203+
{
204+
@Override
205+
public void onRefresh()
206+
{
207+
page = 1;
208+
mAdapter.getDatas().clear();//必须在数据更新前清空,不能太早
209+
getDataByLine();
210+
}
211+
212+
@Override
213+
public void onLoadMore()
214+
{
215+
page++;
216+
if (page <= TOTAL_PAGE)
217+
{//小于总页数就加载更多
218+
// loading more
219+
getDataByLine();
220+
} else
221+
{
222+
//the end
223+
mRecyclerView.setNoMore(true);
224+
}
225+
}
226+
});
227+
mRecyclerView.refresh();
72228
}
73229
//获取Back键的按下事件
74230
@Override
75231
public void onBackPressed()
76232
{
77233

234+
78235
if (drawer.isDrawerOpen(GravityCompat.START))
79236
{
80237
drawer.closeDrawer(GravityCompat.START);
@@ -121,54 +278,73 @@ public boolean onNavigationItemSelected(MenuItem item)
121278
if (id == R.id.nav_camera)
122279
{
123280
changeFragment(R.id.content,oneFragment);
124-
Snackbar.make(view, "nav_camera", Snackbar.LENGTH_LONG)
281+
Snackbar.make(drawer, "nav_camera", Snackbar.LENGTH_LONG)
125282
.setAction("Action", null).show();
126283
}
127284
else if (id == R.id.nav_gallery)
128285
{
129286
changeFragment(R.id.content,twoFragment);
130-
Snackbar.make(view, "nav_camera", Snackbar.LENGTH_LONG)
287+
Snackbar.make(drawer, "nav_camera", Snackbar.LENGTH_LONG)
131288
.setAction("Action", null).show();
132289
}
133290
else if (id == R.id.nav_slideshow)
134291
{
135292
changeFragment(R.id.content,threeFragment);
136-
Snackbar.make(view, "nav_camera", Snackbar.LENGTH_LONG)
293+
Snackbar.make(drawer, "nav_camera", Snackbar.LENGTH_LONG)
137294
.setAction("Action", null).show();
138295
}
139296
else if (id == R.id.nav_manage)
140297
{
141298
changeFragment(R.id.content,fourFragment);
142-
Snackbar.make(view, "nav_manage", Snackbar.LENGTH_LONG)
299+
Snackbar.make(drawer, "nav_manage", Snackbar.LENGTH_LONG)
143300
.setAction("Action", null).show();
144301
}
145302
else if (id == R.id.nav_share)
146303
{
147-
Snackbar.make(view, "nav_share", Snackbar.LENGTH_LONG)
304+
Snackbar.make(drawer, "nav_share", Snackbar.LENGTH_LONG)
148305
.setAction("Action", null).show();
149306
}
150307
else if (id == R.id.nav_send)
151308
{
152-
Snackbar.make(view, "nav_send", Snackbar.LENGTH_LONG)
309+
Snackbar.make(drawer, "nav_send", Snackbar.LENGTH_LONG)
153310
.setAction("Action", null).show();
154311
}
155312
drawer.closeDrawer(GravityCompat.START);
313+
drawer.closeDrawer(GravityCompat.END);
156314
return true;
157315
}
158316

159317
@Override
160318
protected void onMenuClick()
161319
{
162320
super.onMenuClick();
163-
Snackbar.make(view, "onMenuClick", Snackbar.LENGTH_LONG)
321+
Snackbar.make(drawer, "onMenuClick", Snackbar.LENGTH_LONG)
164322
.setAction("Action", null).show();
323+
//显示右侧栏
324+
if (drawer.isDrawerOpen(GravityCompat.START)) {
325+
drawer.closeDrawer(GravityCompat.START);
326+
}
327+
drawer.openDrawer(GravityCompat.END);
165328
}
166329

167330
@Override
168331
protected void onBackClick()
169332
{
170333
super.onBackClick();
171-
Snackbar.make(view, "onBackClick", Snackbar.LENGTH_LONG)
334+
Snackbar.make(drawer, "onBackClick", Snackbar.LENGTH_LONG)
172335
.setAction("Action", null).show();
173336
}
337+
338+
@Override
339+
public boolean onItemLongClick(View view, MenuModel data, int postion)
340+
{
341+
YHViewInject.create().showTips("长按:" + data.getMenuname() + " " + postion);
342+
return true;
343+
}
344+
345+
@Override
346+
public void onItemClick(View view, MenuModel data, int postion)
347+
{
348+
YHViewInject.create().showTips("点击了:" + data.getMenuname() + " " + postion);
349+
}
174350
}

app/src/main/res/layout/activity_demo.xml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
layout="@layout/app_bar_demo"
1414
android:layout_width="match_parent"
1515
android:layout_height="match_parent"/>
16-
<!--1.android:layout_gravity="start"属性表示该View是左边的滑出菜单,这个属性的含义不用多说,这是DrawerLayout使用方式中的知识点。
17-
2.app:headerLayout="@layout/nav_header_demo"表示引用一个头布局文件,这个头就是我们在上面看到的那个背景图片,包括背景图片上面的显示用户名的控件等等。
16+
<!--1.android:layout_gravity="start"属性表示该View是左边的滑出菜单,这个属性的含义不用多说,这
17+
是DrawerLayout使用方式中的知识点。
18+
2.app:headerLayout="@layout/nav_header_demo"表示引用一个头布局文件,这个头就是我们在上面看到的那个背景图片,
19+
包括背景图片上面的显示用户名的控件等等。
1820
3.app:menu="@menu/activity_demo_drawer"表示引用一个menu作为下面的点击项-->
1921
<android.support.design.widget.NavigationView
2022
android:id="@+id/nav_view"
@@ -24,5 +26,11 @@
2426
android:fitsSystemWindows="true"
2527
app:headerLayout="@layout/nav_header_demo"
2628
app:menu="@menu/activity_demo_drawer"/>
27-
29+
<org.yh.library.view.YHRecyclerView
30+
android:id="@+id/nav_view1"
31+
android:layout_width="90dp"
32+
android:layout_gravity="end"
33+
android:fitsSystemWindows="true"
34+
android:layout_height="match_parent"
35+
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
2836
</android.support.v4.widget.DrawerLayout>

app/src/main/res/layout/content_demo.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@
44
android:layout_width="match_parent"
55
android:layout_height="match_parent"
66
android:layout_marginTop="?attr/actionBarSize">
7-
87
</FrameLayout>

0 commit comments

Comments
 (0)