只需单击一次,ListView CheckBox即可进行多选

时间:2015-07-31 16:31:15

标签: android listview checkbox checkboxlist

我正试图在CheckBox ListView中使用ArrayAdapter。当我在列表中选择任何CheckBox onlytime时,会以随机顺序自动选择多个条目。任何人都可以告诉我如何避免这种情况。

以下是我的代码供您参考:

public class SearchListAdapterQ2扩展了BaseAdapter {

int layoutId;
ArrayList<SearchListView> searchresultList = new ArrayList<SearchListView>();

public static int companyCpsId;
public static String companyCpsType = "", search_companyName = "",
        search_countryName = "", handShakeStatus = "";
public static String handShakeCPSName = "";
public static boolean searchListAdapter_Q2 = false;
SharedPreferences sharedpreferences;
boolean markfavStatus = false;
ListView searchResults_listView;
Context context;

public SearchListAdapterQ2(Context context, int layoutId,
        ArrayList<SearchListView> searchresultList,
        ListView searchResults_listView) {
    // TODO Auto-generated constructor stub

    this.layoutId = layoutId;
    this.searchresultList = searchresultList;
    Log.i("inside searchListAdapter", "inside searchListAdapter");
    this.context = context;
    sharedpreferences = context.getSharedPreferences("MyPrefs",
            Context.MODE_PRIVATE);
    this.searchResults_listView = searchResults_listView;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    Log.i("searchresultList",
            "searchresultList: " + searchresultList.size());
    return searchresultList.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return searchresultList.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder1 holder1;

    // LayoutInflater inflater = (LayoutInflater)
    // context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    char color;
    String text = "";
    String address = "";

    LayoutInflater inflater = ((Activity) context).getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.qq_searchlist_repeat_items,
                parent, false);

        holder1 = new ViewHolder1();
        holder1.companyName_textView = (TextView) convertView
                .findViewById(R.id.companyName_textView);
        holder1.companyLogo_textView = (TextView) convertView
                .findViewById(R.id.companyLogo_textView);
        holder1.companyAddress_textView = (TextView) convertView
                .findViewById(R.id.companyAddress_textView);
        holder1.handShakeIcon_imageView = (ImageView) convertView
                .findViewById(R.id.handShakeIcon_imageView);
        holder1.favouritesIcon_imageView = (ImageView) convertView
                .findViewById(R.id.favouritesIcon_imageView);
        holder1.referIcon_imageView = (ImageView) convertView
                .findViewById(R.id.referIcon_imageView);
        holder1.sendEnquiry_imageView = (ImageView) convertView
                .findViewById(R.id.sendEnquiry_imageView);
        holder1.icons_searchResultsPage_relLayout = (RelativeLayout) convertView
                .findViewById(R.id.icons_searchResultsPage_relLayout);
        holder1.chckbx1 = (CheckBox) convertView.findViewById(R.id.chckbx1);

        if (SearchListActivity_Q2.broadcastMode) {
            Log.i("icons_searchResultsPage_relLayout is visible",
                    "icons_searchResultsPage_relLayout is visible");
            holder1.icons_searchResultsPage_relLayout
                    .setVisibility(View.GONE);
            holder1.chckbx1.setVisibility(View.VISIBLE);

        } else {
            holder1.icons_searchResultsPage_relLayout
                    .setVisibility(View.VISIBLE);
            holder1.chckbx1.setVisibility(View.GONE);
        }

        convertView.setTag(holder1);
    } else {
        holder1 = (ViewHolder1) convertView.getTag();
    }
    holder1.id = position;
    search_companyName = searchresultList.get(position).getCpsName();
    search_countryName = searchresultList.get(position).getCountryName();

    try {
        String ssearch_companyName = URLDecoder.decode(search_companyName,
                "UTF-8");
        holder1.companyName_textView.setText(ssearch_companyName);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if (searchresultList.get(position).getCpsName().contains(" ")) {
        String[] splitText = searchresultList.get(position).getCpsName()
                .split("\\s+");
        char a = splitText[0].charAt(0);
        char b = splitText[1].charAt(0);
        text = String.valueOf(a) + String.valueOf(b);
        color = b;

    } else {
        text = searchresultList.get(position).getCpsName().substring(0, 1);
        color = searchresultList.get(position).getCpsName().charAt(1);
    }
    holder1.companyLogo_textView.setText(text.toUpperCase());


    if (searchresultList.get(position).getCpsAddress().isEmpty()) {
        address = searchresultList.get(position).getCountryName();
    } else {
        if (searchresultList.get(position).getCpsAddress().length() > 1) {
            address = searchresultList.get(position).getCpsAddress() + ", "
                    + searchresultList.get(position).getCountryName();
        } else {
            address = searchresultList.get(position).getCountryName();
        }
    }
    holder1.companyAddress_textView.setText(address);


    holder1.companyName_textView
            .setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    searchListAdapter_Q2 = true;
                    companyCpsId = searchresultList.get(position)
                            .getCpsId();
                    Log.i("$$$ companyCpsId", "companyCpsId" + companyCpsId);
                    companyCpsType = searchresultList.get(position)
                            .getCpsType();

                    Intent intent = new Intent(context,
                            CompanyProfile_Activity.class);
                    context.startActivity(intent);

                }
            });
    holder1.referIcon_imageView
            .setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                }
            });

    holder1.sendEnquiry_imageView
            .setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    ArrayList<Q2_SendEnquiryList> sendEnquiry = new ArrayList<Q2_SendEnquiryList>();
                    sendEnquiry.add(new Q2_SendEnquiryList(searchresultList
                            .get(position).getCpsId(), searchresultList
                            .get(position).getCpsName()));
                    sendEnquiry.add(new Q2_SendEnquiryList(1, "abcdefgh"));
                    sendEnquiry.add(new Q2_SendEnquiryList(2, "abcdefg"));
                    sendEnquiry.add(new Q2_SendEnquiryList(3, "abcdef"));
                    sendEnquiry.add(new Q2_SendEnquiryList(4, "abcde"));
                    sendEnquiry.add(new Q2_SendEnquiryList(5, "abcd"));
                    sendEnquiry.add(new Q2_SendEnquiryList(6, "abc"));
                    sendEnquiry.add(new Q2_SendEnquiryList(7, "ab"));

                    Intent intent = new Intent(context,
                            Q2_SendEnquiryActivity.class);
                    intent.putParcelableArrayListExtra("sendEnquiry",
                            sendEnquiry);
                    context.startActivity(intent);

                }
            });

    holder1.handShakeIcon_imageView
            .setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    companyCpsId = searchresultList.get(position)
                            .getCpsId();

                    handShakeCPSName = searchresultList.get(position)
                            .getCpsName();

                    handShakeStatus = searchresultList.get(position)
                            .getHandShakeStatus();
                    ConstantVariables.handShakeFromAdapter = true;
                    if (sharedpreferences.getInt("userId_sp", 0) != 0) {
                        if (sharedpreferences.getInt("profileActiveStatus",
                                0) > 0) {
                            if (sharedpreferences.getInt("organizationId",
                                    0) != 0) {
                                if (handShakeStatus.equalsIgnoreCase("d")) {
                                    ConstantVariables
                                            .handShakeRequest(
                                                    context,
                                                    companyCpsId,
                                                    0,
                                                    ConstantVariables.handShakeFromAdapter,
                                                    searchResults_listView,
                                                    position);
                                } else if (handShakeStatus
                                        .equalsIgnoreCase("p")) {
                                    ConstantVariables
                                            .handShakeRequestAccept(
                                                    context,
                                                    companyCpsId,
                                                    1,
                                                    ConstantVariables.handShakeFromAdapter,
                                                    searchResults_listView,
                                                    position,
                                                    handShakeCPSName);
                                }

                            } else {

                                AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                                        context);
                                // Setting Dialog Title
                                // alertDialog.setTitle("Please Add Company");

                                // Setting Dialog Message
                                alertDialog
                                        .setMessage("Please add your company details");

                                // Setting Positive "Yes" Button
                                alertDialog
                                        .setPositiveButton(
                                                "Add",
                                                new DialogInterface.OnClickListener() {
                                                    public void onClick(
                                                            DialogInterface dialog,
                                                            int which) {

                                                        Intent intent = new Intent(
                                                                context,
                                                                Profile_Activity.class);
                                                        context.startActivity(intent);

                                                    }
                                                });

                                // Setting Negative "NO" Button
                                alertDialog
                                        .setNegativeButton(
                                                "Later",
                                                new DialogInterface.OnClickListener() {
                                                    public void onClick(
                                                            DialogInterface dialog,
                                                            int which) {

                                                        dialog.cancel();
                                                    }
                                                });

                                // Showing Alert Message
                                alertDialog.show();

                            }
                        } else {
                            ConstantVariables
                                    .requestEmailVerification(context);
                        }
                    } else {
                        ConstantVariables.requestLogin(context);
                    }

                }
            });

    holder1.favouritesIcon_imageView
            .setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                }
            });

    return convertView;

}

static class ViewHolder1 {
    TextView companyName_textView, companyAddress_textView,
            companyLogo_textView;
    ImageView handShakeIcon_imageView, favouritesIcon_imageView,
            referIcon_imageView, sendEnquiry_imageView;
    CheckBox chckbx1;
    int id;
    RelativeLayout icons_searchResultsPage_relLayout;
}

}

2 个答案:

答案 0 :(得分:0)

在您的适配器中getView()方法设置模型中单击复选框的状态并调用通知数据集更改,试试

答案 1 :(得分:0)

我在代码中添加了以下行,它开始正常工作:

ArrayList<Integer> checkedPositions = new ArrayList<Integer>();
final Integer index = new Integer(position);
    holder1.chckbx1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            if (((CheckBox) v).isChecked()) {
                // if checked, we add it to the list
                checkedPositions.add(index);
            } else if (checkedPositions.contains(index)) {
                // else if remove it from the list (if it is present)
                checkedPositions.remove(index);
            }

        }
    });
    // set the state of the checbox based on if it is checked or not.
    holder1.chckbx1.setChecked(checkedPositions.contains(index));