dialog+多個listview+checkbox

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

發佈了142 篇原創文章 · 獲贊 265 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章