android中有时候遇到dialog+多个listview+checkbox的选择问题如图所示:
在dialog中左边为4个TextView,右边为四个listview(感觉不太合适,但没找到比较好的解决办法)。左边选中时动态的隐藏与显示listview,最后取出四个listview中checkbox的值。
代码如下:
在主界面中
package com.example.mydialog;
import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button;
private View inflate;
private Dialog dialog;
private TextView profession;
private TextView category;
private TextView project;
private TextView frequency;
private ListView listview;
private ListView listview2;
private ArrayList list;
private ArrayList list2;
private MyAdapter adapter;
private MyAdapter2 adapter2;
private TextView text;
private TextView cancel;
private TextView sure;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
text = (TextView) findViewById(R.id.text);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showMyDialog();
}
});
}
private void initDate() {
for (int i = 0; i < 20; i++) {
list.add("this is " + i);
}
}
private void showMyDialog() {
dialog = new Dialog(this, R.style.ActionSheetDialogStyle);
//填充对话框的布局
inflate = LayoutInflater.from(this).inflate(R.layout.dialog_layout, null);
profession = (TextView) inflate.findViewById(R.id.profession);
category = (TextView) inflate.findViewById(R.id.category);
project = (TextView) inflate.findViewById(R.id.project);
frequency = (TextView) inflate.findViewById(R.id.frequency);
sure = (TextView) inflate.findViewById(R.id.sure);
listview = (ListView) inflate.findViewById(R.id.listview);
listview2 = (ListView) inflate.findViewById(R.id.listview2);
cancel = (TextView) inflate.findViewById(R.id.cancel);
list = new ArrayList();
list2 = new ArrayList();
profession.setOnClickListener(this);
category.setOnClickListener(this);
project.setOnClickListener(this);
frequency.setOnClickListener(this);
cancel.setOnClickListener(this);
sure.setOnClickListener(this);
//初始化控件
//将布局设置给Dialog
dialog.setContentView(inflate);
//获取当前Activity所在的窗体
Window dialogWindow = dialog.getWindow();
//设置Dialog从窗体底部弹出
dialogWindow.setGravity(Gravity.BOTTOM);
WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6
p.width = (int) (d.getWidth() * 1); // 宽度设置为屏幕的0.65
dialogWindow.setAttributes(p);
dialog.show();//显示对话框
initDate();
initDate2();
adapter = new MyAdapter(this, list);
listview.setAdapter(adapter);
adapter2 = new MyAdapter2(this, list2);
listview2.setAdapter(adapter2);
profession.setBackgroundColor(Color.parseColor("#3F51B5"));
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.profession:
profession.setBackgroundColor(Color.parseColor("#3F51B5"));
category.setBackgroundColor(Color.parseColor("#ffffff"));
listview.setVisibility(View.VISIBLE);
listview2.setVisibility(View.GONE);
break;
case R.id.category:
category.setBackgroundColor(Color.parseColor("#3F51B5"));
profession.setBackgroundColor(Color.parseColor("#ffffff"));
listview2.setVisibility(View.VISIBLE);
listview.setVisibility(View.GONE);
break;
case R.id.cancel:
dialog.dismiss();
break;
case R.id.sure:
//第一个listview中数据
HashMap<Integer, String> stateProfession = adapter.stateProfession;
for (Map.Entry<Integer, String> entry : stateProfession.entrySet()) {
Log.i("cb+++", entry.getValue() + "");
}
//第二个listview中数据
HashMap<Integer, String> stateCategory = adapter2.stateCategory;
for (Map.Entry<Integer, String> entry : stateCategory.entrySet()) {
Log.i("cb+++", entry.getValue() + "");
}
Toast.makeText(MainActivity.this,stateProfession.toString()+stateCategory.toString(),Toast.LENGTH_LONG).show();
text.setText(stateProfession.toString()+stateCategory.toString());
dialog.dismiss();
break;
}
}
private void initDate2() {
list2.add("aaa");
list2.add("bbb");
list2.add("ccc");
list2.add("ddd");
}
}
在adapter中代码
package com.example.mydialog;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
/**
* Created by Administrator on 2017/1/23.
*/
public class MyAdapter extends BaseAdapter {
private Context context;
private ArrayList list;
HashMap<Integer, String> stateProfession = new HashMap<Integer, String>();
public MyAdapter(Context context, ArrayList list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {
ViewHolder vh;
if (convertView == null) {
vh = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
vh.textview = (TextView) convertView.findViewById(R.id.textview);
vh.cb = (CheckBox) convertView.findViewById(R.id.cb);
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
vh.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
stateProfession.put(position, list.get(position) + "");
Log.i("cb---",list.get(position)+"");
} else {
stateProfession.remove(position);
}
}
});
vh.cb.setChecked((stateProfession.get(position) == null ? false : true));
vh.textview.setText(list.get(position) + "");
return convertView;
}
static class ViewHolder {
TextView textview;
CheckBox cb;
}
}
demo下载地址
http://download.csdn.net/detail/androidxiaogang/9746619