2013-05-12 8 views
1

У меня есть пользовательский адаптер для списка, чьи ячейки содержат кнопку удаления. Я хочу отобразить сообщение «действительно удалить эту запись?» когда нажата кнопка удаления.Откройте диалоговое окно от пользовательского адаптера

Я обрабатываю событие кнопки удаления изнутри пользовательского адаптера, проблема в том, что для создания диалога мне нужна ссылка на текущую активность ... как я могу это решить? Просто использование контекста приводит меня к исключению нулевого указателя.

+1

сделал и отправить контекст деятельности конструктору адаптер? –

ответ

2

Это должно быть скелетом адаптера, так что активность может передать контекст вперед к адаптеру ..

public class ImagePrepare extends BaseAdapter { 

    private Context ctx; 

     public ImagePrepare(Context ctx, String[] icons,DisplayMetrics m) { 
     // TODO Auto-generated constructor stub 
     this.ctx=ctx; 

    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return lengthofdata; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return data[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

    } 
    } 
3

Поместите этот код ...

AlertDialog.Builder alertDialog = new AlertDialog.Builder((Activity) v.getContext()); 

      alertDialog.setTitle("Delete this item?"); 
      alertDialog.setMessage("Are you sure you want to delete this?"); 
      alertDialog.setIcon(R.drawable.icon); 

      alertDialog.setPositiveButton(
       "Delete", 
       new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          // Do the stuff.. 
         } 
        } 
       ); 


      } 

      alertDialog.show(); 

на вашем списке следует клик слушателю:

@Override 
    public void onListItemClick(ListView lv, View v, int position, long id) { 

} 

Это то, что вы искали?

1

Вы можете использовать вот так.

lv1.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 

       LayoutInflater layout = (LayoutInflater) getBaseContext() 
         .getSystemService(LAYOUT_INFLATER_SERVICE); 
       View popupView = layout.inflate(R.layout.popup1, null); 
       Display display = getWindowManager().getDefaultDisplay(); 
       int height = display.getHeight(); 
       int width = display.getWidth(); 
       final PopupWindow popupWindaow = new PopupWindow(popupView, 
         (int) (width/1.4), (int) (height/2.5)); 
       popupWindaow.showAtLocation(popupView, Gravity.CENTER, 0, 0); 

       TextView tv1 = (TextView) popupView 
         .findViewById(R.id.textView1);         

       tv1.setText("Really delete this entry?"); 

       Button No = (Button) popupView.findViewById(R.id.No); 
          Button Yes = (Button) popupView.findViewById(R.id.Yes); 
       Yes.setOnClickListener(new OnClickListener() { 

        public void onClick(View arg0) { 
         //code to delete 

        } 
       }); 

       No.setOnClickListener(new OnClickListener() { 

        public void onClick(View arg0) { 
         popupWindaow.dismiss(); 

        } 
       }); 

      } 
     }); 

Надеюсь, это поможет вам.

Смежные вопросы