根据值禁用listview内的按钮 - Android

时间:2015-07-24 11:11:13

标签: java android android-listview

我正在尝试根据值禁用自定义列表视图中的特定项目的按钮。但是它会禁用listview中所有项目的按钮。我的CustomAdapter代码位于

之下
 public View getView(int position, View convertView, final ViewGroup parent) {

        View vi = convertView;
        ViewHolder holder;

        if(convertView==null){

            vi = inflater.inflate(R.layout.tabitem, null);   

            holder = new ViewHolder();
            holder.txtRef = (TextView) vi.findViewById(R.id.lst_txt_jobpartid);
            holder.txtDate=(TextView)vi.findViewById(R.id.lst_txt_date);
            holder.txtTime=(TextView)vi.findViewById(R.id.lst_txt_time);
            holder.txtNotes=(TextView)vi.findViewById(R.id.lst_txt_notes);
            holder.txtPick=(TextView)vi.findViewById(R.id.lst_txt_pick);
            holder.txtVia=(TextView)vi.findViewById(R.id.lst_txt_via);
            holder.txtDrop=(TextView)vi.findViewById(R.id.lst_txt_drop);
            holder.txtPassengers=(TextView)vi.findViewById(R.id.lst_txt_passangers);
            holder.txtSuitcases=(TextView)vi.findViewById(R.id.lst_txt_luggages);
            holder.txtChildseat=(TextView)vi.findViewById(R.id.lst_txt_childseat);
            holder.txtFlight=(TextView)vi.findViewById(R.id.lst_txt_flight);
            holder.txtExpArrival=(TextView)vi.findViewById(R.id.lst_txt_expArrival);
            holder.txtMeetnGreet=(TextView)vi.findViewById(R.id.lst_txt_meetngreet);
            holder.txtVehicle=(TextView)vi.findViewById(R.id.lst_txt_vehicle);
            holder.txtReturn=(TextView)vi.findViewById(R.id.lst_txt_waitnrtn);
            holder.txtFee=(TextView)vi.findViewById(R.id.lst_txt_fee);
            holder.txtTopup=(TextView)vi.findViewById(R.id.lst_txt_topup);
            holder.txtPay=(TextView)vi.findViewById(R.id.lst_txt_paymethod);
            holder.txtPrice=(TextView)vi.findViewById(R.id.lst_txt_price);
            holder.btnAccept=(Button)vi.findViewById(R.id.lst_btnAccept);

            vi.setTag( holder );
        }
        else
            holder=(ViewHolder)vi.getTag();

        if(data.size()<=0)
        {

        }
        else
        {
            tempValues=null;
            tempValues = ( job_details ) data.get( position );                                          

  holder.txtRef.setText(String.valueOf(tempValues.getRequestedJobPartID()));    
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            String dateString = sdf.format(tempValues.getPickupDate());
            holder.txtDate.setText(dateString);    
            sdf = new SimpleDateFormat("HH:mm");
            dateString = sdf.format(tempValues.getPickupDate());
            holder.txtTime.setText(dateString);    
            holder.txtNotes.setText(tempValues.getNotes());    
            holder.txtPick.setText(tempValues.getPickupAddress());    
            holder.txtVia.setText(tempValues.getViaLocations());    
            holder.txtDrop.setText(tempValues.getDropoffAddress());                           holder.txtPassengers.setText(String.valueOf(tempValues.getPassengers()));    holder.txtSuitcases.setText(String.valueOf(tempValues.getSuitcases()));
            holder.txtChildseat.setText(tempValues.getChildSeat());
            holder.txtFlight.setText(tempValues.getFlightNumber());
            sdf = new SimpleDateFormat("yyyyMMdd  kk:mm");

            if(tempValues.getExpFlightArrival()!=null) {
                dateString = sdf.format(tempValues.getExpFlightArrival());
                holder.txtExpArrival.setText(dateString);    
            }    
            holder.txtMeetnGreet.setText(tempValues.getMeetAndGreet());    
            holder.txtVehicle.setText(tempValues.getVehicleType());    
            holder.txtReturn.setText(tempValues.getJourneyType());                                      holder.txtFee.setText(String.valueOf(tempValues.getBookingFee()));holder.txtTopup.setText(String.valueOf(tempValues.getAdjustment()));
            holder.txtPay.setText(tempValues.getPaymentMethod());
            holder.txtPrice.setText(tempValues.getTotalFare());
            Button btn1=(Button)vi.findViewById(R.id.lst_btnReject);
            Button btn=(Button)vi.findViewById(R.id.lst_btnAccept);
//Checking the value and disabling/enabling the buttons
            if(tempValues.getRequestStatus()=="Accepted")
            {
                holder.btnAccept.setEnabled(false);
                holder.btnAccept.setEnabled(false);
            }
            else
            {
                holder.btnAccept.setEnabled(true);
                holder.btnAccept.setEnabled(true);
            }    

            Button btn2=(Button)vi.findViewById(R.id.lst_btnStart); 
            btn2.setOnClickListener(new OnItemClickListener(position, "Start", tempValues.getRequestedJobPartID()));

//vi.setOnClickListener(new OnItemClickListener(position));

        }
        return vi;
    }

任何建议都将不胜感激。

listview项目上的click事件也不起作用。我已经尝试删除按钮,并将下面的行放在xml中。我也尝试将焦点设置为代码中的flase。

android:focusable="false"
android:focusableInTouchMode="false"

4 个答案:

答案 0 :(得分:1)

==二元运算符比较内存地址。

if(tempValues.getRequestStatus().equal("Accepted"))
            {
                holder.btnAccept.setEnabled(false);
                holder.btnAccept.setEnabled(false);
            }
            else
            {
                holder.btnAccept.setEnabled(true);
                holder.btnAccept.setEnabled(true);
            } 

关于String类:

equals()方法比较&#34;值&#34;在String实例中(在堆上),无论两个对象引用是否引用相同的String实例。如果任何两个String类型的对象引用引用相同的String实例那么太棒了!如果两个对象引用引用两个不同的String实例,那么它并没有什么区别。它的价值&#34; (即:正在比较的每个String实例中的字符数组的内容)。

答案 1 :(得分:0)

将==改为.equal()

 if(tempValues.getRequestStatus().equal("Accepted"))
        {
            holder.btnAccept.setEnabled(false);
            holder.btnAccept.setEnabled(false);
        }
        else
        {
            holder.btnAccept.setEnabled(true);
            holder.btnAccept.setEnabled(true);
        }    

答案 2 :(得分:0)

更改此行:

 if(tempValues.getRequestStatus()=="Accepted")

为:

 if(tempValues.getRequestStatus().equalsIgnoreCase("Accepted"))
如果tempValues.getRequestStatus()值是&#34;接受&#34;它将忽略该情况。那么条件就是真的。

答案 3 :(得分:0)

使用      tempValues.getRequestStatus()。equals(&#34; Accepted&#34;)

而不是

tempValues.getRequestStatus()==&#34;接受&#34;