Android手动选网,android弹出选择对话框-仿某团购网android客户端栏目抉择

该博客详细介绍了如何在Android应用中实现一个弹窗组件,该组件包含左右两个列表视图。弹窗默认只显示左侧列表,当用户选择左侧列表项时,右侧列表根据数据动态显示,同时调整窗口大小。博客中通过`PopupCategory`类展示了具体的实现逻辑,包括监听事件、数据适配和视图更新等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图一:

09533438.jpg

效果图二:

09533439.jpg

未完善,还比较简单:

弹出对话框,先只显示左边列表,右边列表需要宽度设置为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;

@Override

public 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 data=new ArrayList();

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 childList=new ArrayList();

e.setChildList(childList);

for(int j=0;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(), R.layout.category_child_item);

childcategory.setAdapter(childadapter);

rootcategory.setOnItemClickListener(new OnItemClickListener() {

@Override

public 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 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() {

@Override

public 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;

@Override

public 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 entityList;

private LayoutInflater inflater;

private int itemViewResource;

private int index = 0;

public CategoryAdapter(Context paramContext, List entityList, int itemViewResource) {

this.inflater = ((LayoutInflater) paramContext.getSystemService("layout_inflater"));

this.entityList = entityList;

this.itemViewResource = itemViewResource;

}

public void setData(List 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 boolean isNull(List paramList) {

return (paramList == null) || (paramList.isEmpty());

}

@Override

public Object getItem(int arg0) {

// TODO Auto-generated method stub

return null;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值