2014-12-22 48 views
1

我有Fragment类,它有ListView由Array Adapter实现。当点击ListView时,我想显示确认对话框。以下是我的数组适配器的源代码。无法在阵列适配器中创建警报对话框

Context _context; 
int layoutResourceId; 
List<OrderListInfo> _listOrderListInfoAdapter = new ArrayList<OrderListInfo>(); 
private String ButtonFlag = ""; 
Activity _activity; 

public OrderDetailListAdatper(Context context, int Resource, 
     List<OrderListInfo> listorderlistInfo) { 
    super(context, Resource, listorderlistInfo); 
    _context = context; 
    _listOrderListInfoAdapter = listorderlistInfo; 
    layoutResourceId = Resource; 

} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ViewHolder holder = null; 
    LayoutInflater inflater = (LayoutInflater) _context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (row == null) { 
     row = inflater.inflate(layoutResourceId, parent, false); 
     holder = new ViewHolder(); 
     TextView txtProductCode = (TextView) row 
       .findViewById(R.id.txtProductCode); 
Button btnDelete = (Button) row.findViewById(R.id.btnRemove); 
holder.txtProductCode = txtProductCode; 
row.setTag(holder); 
    } else {holder = (ViewHolder) row.getTag();  } 

OrderListInfo _orderListInfoAdapter = _listOrderListInfoAdapter 
      .get(position); 
    holder.txtProductCode.setText(_orderListInfoAdapter.getProductCode() 
      .toString() 
      ); 

holder.btnDelete.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) {     

      AlertDialog.Builder alert = new AlertDialog.Builder(view.getContext()); 

      alert.setMessage("Do you want to delete?"); 
       alert.setNegativeButton("CANCEL", 
        new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(
           DialogInterface dialog, 
           int whichButton) { 
          dialog.cancel(); 
         } 
        }); 
      alert.setPositiveButton("OK", 
        new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(
           DialogInterface dialog, 
           int whichButton) { 

          OrderDetailListAdatper.this._listOrderListInfoAdapter 
            .remove(position);       OrderDetailListAdatper.thisnotifyDataSetChanged();         
         } 
        }); 
      AlertDialog alertDialog = alert.create(); 
      alertDialog.show(); 
     } 
    }); 
} 
    return row; 
    } 

调用此代码

(AlertDialog alertDialog = alert.create();) , 

后,我得到错误的

 android.view.WindowManager$BadTokenException: 

无法添加窗口 - 令牌null不是一个应用程序。我怎么能在你的getview解决这个问题

+0

你有没有在构造函数中传递上下文给你的arrayadapter? –

+0

使用'getContext'而不是'View.getContext' ..或_context像你指定的..并确保你的上下文指定了一个活动 – Elltz

+0

@Pramod Yadav,@ Elltz我已经发布了我的构造函数。我尝试改变getContext而不是View .getContext,但它仍然有相同的错误。 – dragullar

回答

1
OrderDetailListAdatper adapter = new OrderDetailListAdatper(Yourclass.this,Resource, 
    listorderlistInfo); 
//set your adapter.. 

holder.btnDelete.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View view) {     

     AlertDialog.Builder alert = new AlertDialog.Builder((Activity)_context); 

     alert.setMessage("Do you want to delete?"); 
      alert.setNegativeButton("CANCEL", 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(
          DialogInterface dialog, 
          int whichButton) { 
         dialog.cancel(); 
        } 
       }); 
     alert.setPositiveButton("OK", 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(
          DialogInterface dialog, 
          int whichButton) { 

         OrderDetailListAdatper.this._listOrderListInfoAdapter 
           .remove(position);       OrderDetailListAdatper.thisnotifyDataSetChanged();         
        } 
       }); 
     alert.create().show(); // btw show() creates and shows it.. 
    } 
}); 

也是我认为警报对话框 - (制造商)是老skulled弃用,要么把alertdialog在dialogfragment,或创建一个dialogfragment你的确认..