2016-01-27 43 views
1

我是Android開發人員的新手,我很難圍繞android listviews進行包裝。我幾乎經歷了整個谷歌搜索,並嘗試每一個「可能」的解決方案,但沒有真正得到listview,我很難解決這個問題。如何在列表視圖中禁用按鈕

當我點擊listview項目中的complete_btn時,我想禁用特定的按鈕。

現在,在else {}部分給我的空指針異常(它在if(converView == null)部分罰款)。如果我刪除代碼,一切正常,但即使只是註釋掉監聽器中的所有內容也是行不通的。

如果在按下按鈕時彈出的警報對話框中單擊Yes,我想最終禁用該按鈕!有人可以幫助我嗎?

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

    View itemView; 
    if (convertView == null) { 
     itemView = layoutInflater.inflate(R.layout.activity_selected_delivery_item, parent, false); 

      final Deliveryltem deliveryltemPosition = epicerieDelivery.selectedDeliveryItem.get(position); 

      icon = (ImageView) itemView.findViewById(R.id.selected_delivery_img); 
      name = (TextView) itemView.findViewById(R.id.selected_item_name); 
      phone_tx = (TextView) itemView.findViewById(R.id.selected_item_phone); 
      complete_btn = (Button) itemView.findViewById(R.id.selected_complete_btn); 

      if(deliveryltemPosition.order_taken_str.equals("2")){ 
       complete_btn.setEnabled(false); 
      } 
      phone_tx.setText(deliveryltemPosition.recipient_phonenum); 

     complete_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ((ListView) parent).performItemClick(v, position , 0); 
       try{ 
        order_seq = deliveryltemPosition.order_seq; 
        position_sms = position; 
        Deliveryltem deliveryltemPosition1 = epicerieDelivery.selectedDeliveryItem.get(position); 
        String name = deliveryltemPosition1.recipient_name; 
        String phone = deliveryltemPosition1.recipient_phonenum; 
        AlertDialog dialog = createdialogBox_finish(name, phone, position); 
        dialog.show(); 
       }catch (Exception e){ 

       } 
      } 
     }); 
     return itemView; 
    }else{ 
     itemView = convertView; 
     if(epicerieDelivery.selectedDeliveryItem.size() != 0){ 
      final Deliveryltem deliveryltemPosition = epicerieDelivery.selectedDeliveryItem.get(position); 


      name = (TextView) itemView.findViewById(R.id.selected_item_name); 
      phone_tx = (TextView) itemView.findViewById(R.id.selected_item_phone); 
      complete_btn = (Button) itemView.findViewById(R.id.selected_complete_btn); 

      if(deliveryltemPosition.order_taken_str.equals("2")){ 
       complete_btn.setEnabled(false); 
      } 


      complete_btn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        ((ListView) parent).performItemClick(v, position , 0); 
        try{ 
         order_seq = deliveryltemPosition.order_seq; 
         position_sms = position; 
         Deliveryltem deliveryltemPosition1 = epicerieDelivery.selectedDeliveryItem.get(position); 
         String name = deliveryltemPosition1.recipient_name; 
         String phone = deliveryltemPosition1.recipient_phonenum; 
         buttons.add(complete_btn); 
         AlertDialog dialog = createdialogBox_finish(name, phone, position); 
         dialog.show(); 
        }catch (Exception e){ 

        } 
       } 
      }); 
     } 
     return convertView; 
    }} 


private AlertDialog createdialogBox_finish(String name, String phone, int position1){ 

    final String name_str = name; 
    final String phone_str = phone; 
    courier_id = selectedActivity2.courier_id; 
    int button_pos = position1; 
    final String message_finish = "message_content"; 
    buttons.get(0).setEnabled(false); 
    buttons.clear(); 

    AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
    builder.setMessage("배송을 완료하셨습니까?"); 
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      try{ 
       SmsManager smsManager = SmsManager.getDefault(); 
       if (message_finish.length() > 60) { 
        ArrayList<String> contents = smsManager.divideMessage(message_finish); 
        for(int j = 0; j<contents.size(); j++){ 
         smsManager.sendTextMessage(phone_str, null, contents.get(j), null, null); 
        } 
       } else {     
        smsManager.sendTextMessage(phone_str, null, message_finish, null, null); 
       } 

      }catch (Exception e){ 
      } 
     } 
    }); 

    builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     } 
    }); 
    AlertDialog dialog = builder.create(); 
    return dialog; 
} 

回答

0

添加

Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE); 
button.setEnabled(false); 

builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      } 

方法,如:

builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 

      Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE); 
      button.setEnabled(false); 

      try{ 
       SmsManager smsManager = SmsManager.getDefault(); 
       if (message_finish.length() > 60) { 
        ArrayList<String> contents = smsManager.divideMessage(message_finish); 
        for(int j = 0; j<contents.size(); j++){ 
         smsManager.sendTextMessage(phone_str, null, contents.get(j), null, null); 
        } 
       } else {     
        smsManager.sendTextMessage(phone_str, null, message_finish, null, null); 
       } 

      }catch (Exception e){ 
      } 
     } 
    });