6.实现snackBar自定义布局的操作方式
/** * 向Snackbar中添加view * @param snackbar * @param layoutId 要加入的布局id * */ public static View SnackbarAddView(Snackbar snackbar, int layoutId) { View snackbarview = snackbar.getView(); Snackbar.SnackbarLayout snackbarLayout=(Snackbar.SnackbarLayout)snackbarview; View add_view = LayoutInflater.from(snackbarview.getContext()).inflate(layoutId,null); LinearLayout.LayoutParams p = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT); p.gravity= Gravity.CENTER_VERTICAL; snackbarLayout.addView(add_view,1,p);//为了方便处理,直接将整个布局充满snackBar return add_view; }加入了布局之后需要设置监听或者其他操作可以进行如下操作
/** * 对 snackBar的设置 * @param view 依赖的布局 * @param myTitle 要显示得标题 */ public void setSnackBar(View view,String myTitle) { snackbar = Snackbar.make(view, "", Snackbar.LENGTH_SHORT) .setDuration(4000); View addView = SnackBarUtils.SnackbarAddView(snackbar, R.layout.snack_layout); View sure = addView.findViewById(R.id.snack_sure); View cancel = addView.findViewById(R.id.snack_cancel); TextView title = (TextView) addView.findViewById(R.id.title); title.setText(myTitle); setOnClick(sure,cancel); }可以借鉴下面文章:注明出处:http://blog.csdn.net/love_xiaozhao/article/details/52237743
5.优雅实现recycleView的单选方式
直接上代码:
/** * 可以单选的recycleView适配器 */ public class DepartmentChooseAdapter extends RecyclerView.Adapter{ private List list = new ArrayList<>(); private LayoutInflater inflater; private int mSelectedPos = -1;//上次选中的item的位置,初始为-1 private callBack call; public DepartmentChooseAdapter(List list, Activity activity, callBack call) { this.list = list; inflater = LayoutInflater.from(activity); this.call = call; } @Override public DepartmentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new DepartmentViewHolder(inflater.inflate(R.layout.department_choose_item, parent, false)); } @Override public void onBindViewHolder(final DepartmentViewHolder holder, final int position) { Depart depart = list.get(position); holder.txtName.setText(depart.getName()); holder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //将上一次的holder里面的checkBox关闭,使用回调 call.closeCheck(mSelectedPos); //将现在的checkBox选中更新position mSelectedPos = position; holder.checkBox.setChecked(true); } }); } @Override public int getItemCount() { return list.size(); } public void addAll(List list) { if (list == null || list.size() == 0) { return; } this.list = list; notifyDataSetChanged(); } /** * 获取选中item的位置 * * @return */ public int getPosition() { return mSelectedPos; } public interface callBack { void closeCheck(int lastPosition); } public static class DepartmentViewHolder extends ViewHolder { public CheckBox checkBox; LinearLayout lin; TextView txtName; public DepartmentViewHolder(final View itemView) { super(itemView); txtName = (TextView) itemView.findViewById(R.id.txt_name); checkBox = (CheckBox) itemView.findViewById(R.id.departChoose_check); lin = (LinearLayout) itemView.findViewById(R.id.departChoose_lin); } } }
可以看到,在这里使用回调的方式,将一些操作放到了Activity里面了:
final RecyclerView recyclerView = findViewByIdNoCast(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView .addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); madapter = new DepartmentChooseAdapter(list, this, new DepartmentChooseAdapter.callBack() { @Override public void closeCheck(int lastPosition) { if (lastPosition != -1) { DepartmentChooseAdapter.DepartmentViewHolder lastHolder = (DepartmentChooseAdapter.DepartmentViewHolder) recyclerView.findViewHolderForLayoutPosition(lastPosition); lastHolder.checkBox.setChecked(false);//关闭先前的checkBox } } }); recyclerView.setAdapter(madapter);如此进行操作 就可以进行单选了,要获得需要的数据,只需要调用适配器中的getposition方法,然后再在数据源中取得即可:
int position = madapter.getPosition();
Depart depart = list.get(position);//获得当前选中的depart
4.对多个EdtiText点击软键盘上的回车切换至下一个的操作
- name="android:imeOptions">actionNext
可以设置这个属性,另外还有其他方法 见链接:注明下面这个是转载的
http://blog.csdn.net/u010461658/article/details/44700725
3.使用 static 关键字修饰内部类就不会持有外部类的强引用,这样不会造成内存泄露问题
比如 recycleView的 viewHolder
//底部加载更多item的viewholder static class LoadMoreVH extends RecyclerView.ViewHolder { public LoadMoreVH(View itemView) { super(itemView); } }
2.
Toolbar的右侧menu不能通过重新inflateMenu来更改,因为inflateMenu会重新增加一个menu,Toobar右侧按钮的隐藏与显示有一个专门的方法
隐藏
mToolbar.getMenu().findItem(0//R.id.moreMenu,别用后面的R.id.这种做法,这个可以看做是数组,用0,1,2来表示位置即可).setVisible(false);
显示
mToolbar.getMenu().findItem(0).setVisible(true);
上述方法存在问题:解决方法如下:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_targetedit_toolbar, menu); if(targetId != -1){//表示是详情页面 menu.getItem(0).setVisible(false);//隐藏保存 menu.getItem(1).setVisible(true);//显示编辑 } return true; }需要在这个方法里面操作
1.将屏幕变暗/亮
private void makeWindowDark() { WindowManager.LayoutParams params = getWindow().getAttributes(); params.alpha = 0.7f;//0.7变暗,设置为1f就可以恢复正常; getWindow().setAttributes(params); }