我正在尝试根据值禁用自定义列表视图中的特定项目的按钮。但是它会禁用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"
答案 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;