2

セルに削除ボタンが含まれているリストビュー用のカスタム アダプターがあります。「本当にこのエントリを削除しますか?」というメッセージを表示したい 削除を押したとき。

カスタム アダプタの内部から削除ボタン イベントを処理します。問題は、ダイアログを作成するために現在のアクティビティへの参照が必要なことです...どうすればこれを解決できますか? コンテキストを使用するだけで、null ポインター例外が発生します。

4

3 に答える 3

4

このコードを入れて...

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) {

}

あなたが探していたものですか?

于 2013-05-12T11:52:33.373 に答える
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

    }
   }
于 2013-05-12T11:59:07.340 に答える
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();

                    }
                });

            }
        });

これがお役に立てば幸いです。

于 2013-05-12T11:56:57.910 に答える