android弹出抉择对话框-仿某团购网android客户端栏目选择
16lz
2021-12-29
http://www.myexception.cn/android/1346620.html
android弹出选择对话框-仿某团购网android客户端栏目选择
效果图一:
效果图二:
未完善,还比较简单:
弹出对话框,先只显示左边列表,右边列表需要宽度设置为0,用visiable会影响使用。
选中左边列表时,再根据数据情况展现右边或者是选中提交。
PopupCategory.java
package com.example.ysq.activity;import java.util.ArrayList;import java.util.List;import com.example.ysq.R;import com.example.ysq.adapter.CategoryAdapter;import com.example.ysq.entity.CategoryEntity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.LinearLayout.LayoutParams;import android.widget.ListView;import roboguice.fragment.RoboDialogFragment;import roboguice.inject.InjectView;public class PopupCategory extends RoboDialogFragment{@InjectView(R.id.rootcategory)private ListView rootcategory;@InjectView(R.id.childcategory)private ListView childcategory;@InjectView(R.id.child_lay)private View child_lay;private Window window;public int x,y;@Overridepublic void onActivityCreated(Bundle savedInstanceState){super.onActivityCreated(savedInstanceState);this.rootcategory.setDrawSelectorOnTop(true); this.rootcategory.setVerticalScrollBarEnabled(false); this.childcategory.setDrawSelectorOnTop(true); this.childcategory.setVerticalScrollBarEnabled(false); final List<CategoryEntity> data=new ArrayList<CategoryEntity>(); for(int i=0;i<20;i++){ CategoryEntity e=new CategoryEntity(); data.add(e); e.setSeq(i); e.setCount(i%3); e.setName("测试"+i); List<CategoryEntity> childList=new ArrayList<CategoryEntity>(); e.setChildList(childList); for(int j=0;j<e.getCount();j++){ CategoryEntity ce=new CategoryEntity(); childList.add(ce); ce.setSeq(j); ce.setCount(j); ce.setName("子目录"+i+":"+j); } } final CategoryAdapter adapter=new CategoryAdapter(getActivity(), data, R.layout.category_item); rootcategory.setAdapter(adapter); final CategoryAdapter childadapter=new CategoryAdapter(getActivity(), new ArrayList<CategoryEntity>(), R.layout.category_child_item); childcategory.setAdapter(childadapter); rootcategory.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {//用下面getChildAt会报异常,因为这个只能在手机屏幕可视范围内能获取到,超出返回null//View v;//Log.e("i:", parent.getCount()+"");//Log.e("i:", parent.getChildCount()+"");//for (int i = 0; i < parent.getChildCount(); i++) {//Log.e("i:", i+"");//v = parent.getChildAt(i);//if (position == i) {//v.setBackgroundColor(Color.argb(153, 0, 186, 255));//} else {//v.setBackgroundColor(Color.TRANSPARENT);//}//}adapter.setFocus(position);CategoryEntity category=data.get(position);List<CategoryEntity> childList=category.getChildList();if(childList.size()>0){childadapter.setData(childList);WindowManager.LayoutParams localLayoutParams;localLayoutParams=window.getAttributes();localLayoutParams.width = (int)(width-localLayoutParams.x*2);localLayoutParams.height = (int)(height-localLayoutParams.y*2);window.setAttributes(localLayoutParams);LayoutParams params=new LayoutParams((int)(width/2-localLayoutParams.x),localLayoutParams.height); child_lay.setLayoutParams(params);}else{//todo:PopupCategory.this.dismiss();}}}); childcategory.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {PopupCategory.this.dismiss();} }); // child_lay.setVisibility(View.INVISIBLE); //设置宽度高度 LayoutParams params=new LayoutParams(0, 0); child_lay.setLayoutParams(params);}private int height;private int width;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {window = this.getDialog().getWindow();WindowManager.LayoutParams localLayoutParams;window.setWindowAnimations(R.style.push_top);window.setBackgroundDrawableResource(R.drawable.bg_category);localLayoutParams=window.getAttributes();localLayoutParams.gravity=Gravity.TOP|Gravity.LEFT;localLayoutParams.x=this.x;localLayoutParams.y=this.y;window.addFlags(Window.FEATURE_PROGRESS);localLayoutParams.dimAmount=0.6F;DisplayMetrics displaymetrics = new DisplayMetrics();this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);height = displaymetrics.heightPixels;width = displaymetrics.widthPixels;localLayoutParams.width = (int)(width/2-localLayoutParams.x);localLayoutParams.height = (int)(height-localLayoutParams.y*2);window.setAttributes(localLayoutParams);this.setCancelable(true);this.getDialog().setCanceledOnTouchOutside(true);View localView = inflater.inflate(R.layout.popup_category, container, false);return localView;}}
CategoryAdapter.java
package com.example.ysq.adapter;import java.util.List;import com.example.ysq.R;import com.example.ysq.entity.CategoryEntity;import android.content.Context;import android.graphics.Color;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class CategoryAdapter extends BaseAdapter {private List<CategoryEntity> entityList;private LayoutInflater inflater;private int itemViewResource;private int index = 0;public CategoryAdapter(Context paramContext, List<CategoryEntity> entityList, int itemViewResource) {this.inflater = ((LayoutInflater) paramContext.getSystemService("layout_inflater"));this.entityList = entityList;this.itemViewResource = itemViewResource;}public void setData(List<CategoryEntity> paramList){this.entityList=paramList;notifyDataSetChanged();}private CategoryEntity b(int paramInt) {return (CategoryEntity) this.entityList.get(paramInt);}public final void setFocus(int index ) {this.index = index ;notifyDataSetChanged();}public final int getCount() {if (isNull(this.entityList))return 0;return this.entityList.size();}public final long getItemId(int paramInt) {return paramInt;}public final View getView(int paramInt, View paramView,ViewGroup paramViewGroup) {CategoryEntity localwk = b(paramInt);ListItemView itemView; if (paramView == null) { paramView = this.inflater.inflate(this.itemViewResource, paramViewGroup, false); itemView = new ListItemView(); itemView.name = ((TextView)paramView.findViewById(R.id.name)); itemView.count = ((TextView)paramView.findViewById(R.id.count)); itemView.haschild = ((ImageView)paramView.findViewById(R.id.haschild)); paramView.setTag(itemView); }else{ itemView = (ListItemView)paramView.getTag(); } if(this.itemViewResource==R.layout.category_item){//父结构 if(localwk.getSeq()==this.index){ paramView.setBackgroundColor(Color.argb(255,234,234,234));//#ffeaeaea }else{ paramView.setBackgroundDrawable(null); } } itemView.name.setText(localwk.getName()); if (localwk.getCount() != -1) itemView.count.setText(String.valueOf(localwk.getCount())); if (isNull(localwk.getChildList())) itemView.haschild.setVisibility(View.INVISIBLE); else itemView.haschild.setVisibility(View.VISIBLE); return paramView;}static class ListItemView{ TextView name; TextView count; public ImageView haschild;}public <T> boolean isNull(List<T> paramList) {return (paramList == null) || (paramList.isEmpty());}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}}
更多相关文章
- Google I/O 发布android studio for linux 无法启动 解决
- Android(安卓)APN设置 获取APN列表
- Android自定义Dialog对话框
- Android(安卓)UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android(安卓)中文 API ——对话框 AlertDialog.Builder
- Android之TextView属性列表
- Android自定义View(1):对话框-Dialog
- android之组件2
- android 实现QQ好友列表(扩展listview:ExpandableListView)