2017-08-19 38 views
-1

我有一個'批准'按鈕在每一行的列表視圖。當我點擊該「批准」按鈕時,其背景顏色應該改變,文本應該從「批准」更改爲「批准」。在這裏,我能夠爲此編寫代碼,如setBackgroundColor(),setText(), 但是問題在於,當我滾動時,它也影響了listview中的另一行。該特定行的按鈕顏色和文字也被更改。我過去兩天曾試過這個問題,但沒有找到任何答案。請幫助我。提前感謝。Android:列表視圖按鈕單擊事件在一行中影響其他行

這裏是一個適配器類

public class OrderApprovalAdapter extends ArrayAdapter 
{ 
SessionManager session; 
String Wholesaler_name; 
String mobile_no,Order_id; 
List list1 = new ArrayList(); 
Context context; 

OrderApprovalDetails contacts; 

public OrderApprovalAdapter(@NonNull Context context, @NonNull int Resource) 
{ 
    super(context, Resource); 
    this.context = context; 
} 
@Override 
public void add(@Nullable Object object) 
{ 
    super.add(object); 
    list1.add(object); 
} 

@Override 
public int getCount() 
{ 
    return list1.size(); 
} 

@Override 
public Object getItem(int position) 
{ 
    return list1.get(position); 
} 

@Override 
public long getItemId(int position) 
{ 
    return position; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    final OrderApprovalAdapter.ContactHolder contactHolder; 
    session = new SessionManager(context); 
    HashMap<String, String> user = session.getUserDetails(); 
    Wholesaler_name = user.get(SessionManager.KEY_NAME); 

    View row; 
    row = convertView; 

    if (row == null) 
    { 
     LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = layoutInflater.inflate(R.layout.order_approval_format, parent, false); 
     contactHolder = new ContactHolder(); 
     contactHolder.date = (TextView) row.findViewById(R.id.invoice_date); 
     contactHolder.orderid = (TextView) row.findViewById(R.id.invoice_no); 
     contactHolder.shopname = (TextView) row.findViewById(R.id.shop_name); 
     contactHolder.ownername = (TextView) row.findViewById(R.id.owner_name); 
     contactHolder.mobile=(TextView) row.findViewById(R.id.mobile_noo); 
     contactHolder.location=(TextView)row.findViewById(R.id.location); 
     contactHolder.itemscount=(TextView)row.findViewById(R.id.items); 
     contactHolder.amount=(TextView)row.findViewById(R.id.total); 
     contactHolder.products_details=(TextView)row.findViewById(R.id.products); 
     contactHolder.Approve=(Button) row.findViewById(R.id.approve_btn); 

    row.setTag(contactHolder); 
    } else 
    { 
     contactHolder = (ContactHolder) row.getTag(); 
    } 
    final OrderApprovalDetails contacts = (OrderApprovalDetails) this.getItem(position); 
    contactHolder.date.setText(contacts.getDate()); 
    contactHolder.orderid.setText(contacts.getOrderid()); 
    contactHolder.shopname.setText(contacts.getShopname()); 
    contactHolder.ownername.setText(contacts.getOwnername()); 
    contactHolder.mobile.setText(contacts.getMobile()); 
    contactHolder.location.setText(contacts.getLocation()); 
    contactHolder.itemscount.setText(contacts.getItemscount()); 
    contactHolder.amount.setText(contacts.getAmount()); 
    contactHolder.products_details.setText(contacts.getProducts_details()); 

    contactHolder.Approve.setOnClickListener(new View.OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
     Toast.makeText(context, "Approved Succesfully", Toast.LENGTH_SHORT).show(); 
     contactHolder.Approve.setEnabled(false); 
     contactHolder.Approve.setText("Approved"); 
     contactHolder.Approve.setBackgroundColor(Color.BLUE); 

     notifyDataSetChanged(); 

     } 
    }); 
    final View finalRow = row; 
    return row; 
} 
static class ContactHolder 
{ 
    TextView date,orderid,shopname,ownername,mobile,location,itemscount,amount,products_details; 
    Button Approve,Decline; 
} 
+0

嘗試使用列表視圖的位置.. –

回答

0

嘗試代碼適配器設置

String txtnew = contact.get(position).getOrderid(); 
+0

可以請你清楚地告訴我,我不明白@harshal –

0

需要設置批准(或不)數據每一次,所有行。所以你需要一個數組保持點擊一行,就像這樣:

在適配器:

private ArrayList<Integer> selectedPos = new ArrayList<>(); 

contactHolder.Approve的onClick:

selectedPos.add(position); 

終於低於這個contactHolder.products_details.setText(contacts.getProducts_details());線檢查批准狀態:

if(selectedPos.contain(position)){ 
    contactHolder.Approve.setEnabled(false); 
    contactHolder.Approve.setText("Approved"); 
    contactHolder.Approve.setBackgroundColor(Color.BLUE); 
} else{ 
    contactHolder.Approve.setEnabled(true); 
    contactHolder.Approve.setText("not Approved"); 
    contactHolder.Approve.setBackgroundColor(Color.RED); 
} 
+0

它不工作@MHP –

+0

它應該嘗試使用數組的ContactHolder,並添加並檢查這一個。例如selectedPos.contain(contactHolder) – MHP

0

你可以這樣做。

實現此方法:

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

希望它可以幫助

+0

它不適合我@Mitesh ji –

1

你可以用這樣的觀念:
取數據庫中的一個多場「狀態」默認的批准0 當用戶點擊按鈕將狀態更改爲1,並根據列表視圖更新您的項目
if(status == 1)然後查看顏色,啓用/禁用等。

相關問題