ArrayAdapter-Android中的ViewHolder出现问题

ArrayAdapter-Android中的ViewHolder出现问题,android,android-listview,android-arrayadapter,android-adapter,Android,Android Listview,Android Arrayadapter,Android Adapter,我有一个自定义适配器,它呈现两(2)个复选框,一张图片和客户端的名称。适配器所需的所有信息都是从包含客户机类的ArratList获取的 如果某个特定客户的一个复选框被勾选,而另一个复选框未被勾选,则每一行都需要为该客户选中(选中)两个复选框,以处理采购订单,从而将标记为不匹配。要生成有效订单,需要勾选这两个复选框 我们正在实现一个用于验证的按钮,它将发现适配器中的任何不匹配项,然后高亮显示不匹配项 版本:按下verificationBtn后,我能够识别复选框上是否有任何行不匹配,例如,复选框1是

我有一个自定义适配器,它呈现两(2)个复选框,一张图片和客户端的名称。适配器所需的所有信息都是从包含客户机类的ArratList获取的

如果某个特定客户的一个复选框被勾选,而另一个复选框未被勾选,则每一行都需要为该客户选中(选中)两个复选框,以处理采购订单,从而将标记为不匹配。要生成有效订单,需要勾选这两个复选框

我们正在实现一个用于验证的按钮,它将发现适配器中的任何不匹配项,然后高亮显示不匹配项

版本:按下verificationBtn后,我能够识别复选框上是否有任何行不匹配,例如,复选框1是否选中,复选框2是否未选中。这会将该行标记为不匹配。我正在使用基于clientList的复选框位置,clientList是List clientList的arraylist

问题:如何获得视图持有者的位置,以便与客户列表位置进行比较?是否有任何方法可以强制viewHolder存储位置并将其取回,并与cli.getClient_number()进行比较

到目前为止,我已经测试了两种不同的方法,但都没有成功:

方法1:

 viewHolder.clientName.setBackgroundColor((Interger.parseInt(cli.getClient_number()) ) == position ? Color.GREEN : Color.TRANSPARENT);
方法2

viewHolder.clientName.setBackgroundColor(Color.GREEN);
这里是我正在实现的代码

// This goes in my main Client Activity
Button verificationBtn = (Button) findViewById(R.id.verificationBtn);
    verificationBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

                buffer.setLength(0);
                mismatchTv.setText("");

                for (Client cli : clientList) {
                    if (cli.isCheckboxOneSelected() != cli.isCheckboxTwoSelected()) {

                    //We had defined above the following buffer = new StringBuffer();
                    buffer.append((ah.parseInt(cli.getClient_number(), 0) - 1) + ", ");
                    cli.setMismatch(true);

                    //We are passing here the ID that correspond to the client mismatch
                    list_adapter.setBackgroundColor(Integer.parseInt(cli.getClient_number()) - 1);

                    setListAdapter(list_adapter);
                    Log.w("cli.getClient_number() ", String.valueOf(Integer.parseInt(cli.getClient_number()) - 1));
                }


}

// We display any mismatch on a TextView on top of the screen
if (buffer.length() != 0) {

    //This is a TextView on top of the screen
    mismatchTv.setText("Error en Client(s) "
        + buffer.toString());
}




// This goes inside of the ClientArrayAdapter
public void setBackgroundColor(int position) {
    Log.w("inside of setBackgroundColor method", "True");
    switchIndex = 1;
    positionFetched = position;
}

// This goes inside of the ClientArrayAdapter
// and inside the body of public View getView(int position, View convertView, ViewGroup parent) {   
switch (switchIndex) {

    case 1:

        viewHolder.cbone
            .setButtonDrawable(R.drawable.btn_checkbox_selector);
        viewHolder.cbtwo
            .setButtonDrawable(R.drawable.btn_checkbox_selector);

        Log.w("switch 1 was called ", "True");
        for (Client cli : clientList) {
            if (cli.isCheckboxOneSelected() != cli.isCheckboxTwoSelected()) {

                Client cli = getItem(positionFetched);

                    if (cli.isMismatch()) { 
                        cli.setColor(Color.BLACK); 
                        Log.e("if (cli.isMismatch()) ", "");

                        //HERE WE ARE TRYING TO HIGHLIGHT THE ROW WITH MISMATCH
                        //WHY THIS LINE DOES NOT WORK?
                        //THE ISSUE THAT I AM GETTING IS THAT I CANNOT CONTROL  WHAT ROW TO AFFECT 
                        //IN THE VIEW HOLDER
                        viewHolder.clientName.setBackgroundColor(Color.GREEN);

                    }

                }

            }

        break;

    default:
        viewHolder.cbone.setButtonDrawable(R.drawable.disabled_cb);
        viewHolder.cbtwo.setButtonDrawable(R.drawable.disabled_cb);
        break;
}

// This goes inside of the ClientArrayAdapter           
    static class ViewHolder {
        public TextView clientName;
        public TextView clientNumber;
        public ImageView imageView;
        public CheckBox cbtwo;
        public CheckBox cbone;
        public int position;
    }

经过三天的努力,我终于找到了解决方案,将方法#1移动到getView方法的末尾。:-)

太好了:)谢谢你让我们知道:)祝你好运。我知道这不是任何安卓开发者每天都能看到的典型任务,这是一个高级别的请求,可以只为老狼队开发者解决。:-)我看不到任何问题,这就是为什么评论。。。但现在我发现了它,隐藏在你的代码深处。。。“为什么这条线不行?”。。。你至少可以告诉我们你想要什么。。。发生了什么,应该发生什么…你知道。。。我想你的问题是你只有一个取景器。。。要说的更多,我必须看到整个getView…亲爱的ElDuderino,我已经发布了一个新版本,其中有具体的问题,如果我说得清楚,请让我知道。