ListView按钮单击alertdialog

时间:2017-01-20 05:59:26

标签: android listview button

我正在使用自定义适配器将数据添加到我的listview,扩展ResourceCursorAdapter。我需要处理列表视图中的按钮单击事件。每个列表都包含2个按钮。当我点击这些按钮时,如何显示alertdailog ...

我的ListViewAdapter.java代码......

class ListViewAdapter extends ResourceCursorAdapter {


ListViewAdapter(Context context, int layout, Cursor c) {
    super(context, layout, c);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView fname = (TextView) view.findViewById(R.id.fname);
    TextView lname = (TextView) view.findViewById(R.id.lname);
    TextView gender=(TextView)view.findViewById(R.id.gender);
    Button edit=(Button)view.findViewById(R.id.button3);
    Button start=(Button)view.findViewById(R.id.button4);

    ImageView img=(ImageView)view.findViewById(R.id.profile_image);
    fname.setText(cursor.getString(2));
    lname.setText(cursor.getString(3));
    gender.setText(cursor.getString(5));
    Bitmap bmp = BitmapFactory.decodeFile(cursor.getString(10));

    Bitmap thumbBitmap = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(cursor.getString(10)),320,240);

    img.setImageBitmap(thumbBitmap);

edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    AlertDialog.Builder builder = new        AlertDialog.Builder(MainActivity.this);
    builder.setMessage("Hello")
            .setPositiveButton("Start", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    Intent intent = new Intent(getApplicationContext(), Consultation.class);

                    startActivity(intent);

                }
            })
            .setNegativeButton("Edit", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {


                    Intent intent = new Intent(getApplicationContext(), AddPatient.class);

                    startActivity(intent);
                }
            })
            .setNeutralButton("Cancel",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                }
            });
    AlertDialog d = builder.create();
    d.setTitle("Patient Details");
    d.show();
    d.setCancelable(false);
}
});
}

代码显示alertdialog上的错误... 我该如何解决这个问题。?

2 个答案:

答案 0 :(得分:0)

只需将上下文传递给警报对话框,如下所示:

class ListViewAdapter extends ResourceCursorAdapter {
Context context;

ListViewAdapter(Context context, int layout, Cursor c) {
super(context, layout, c);
this.context=context;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView fname = (TextView) view.findViewById(R.id.fname);
TextView lname = (TextView) view.findViewById(R.id.lname);
TextView gender=(TextView)view.findViewById(R.id.gender);
Button edit=(Button)view.findViewById(R.id.button3);
Button start=(Button)view.findViewById(R.id.button4);

ImageView img=(ImageView)view.findViewById(R.id.profile_image);
fname.setText(cursor.getString(2));
lname.setText(cursor.getString(3));
gender.setText(cursor.getString(5));
Bitmap bmp = BitmapFactory.decodeFile(cursor.getString(10));

Bitmap thumbBitmap = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(cursor.getString(10)),320,240);

img.setImageBitmap(thumbBitmap);

edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new            AlertDialog.Builder(context);
builder.setMessage("Hello")
        .setPositiveButton("Start", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {

                Intent intent = new Intent(context.getApplicationContext(),  Consultation.class);

                startActivity(intent);

            }
        })
        .setNegativeButton("Edit", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {


                Intent intent = new Intent(context.getApplicationContext(), AddPatient.class);

                startActivity(intent);
            }
        })
        .setNeutralButton("Cancel",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
            }
        });
AlertDialog d = builder.create();
d.setTitle("Patient Details");
d.show();
d.setCancelable(false);
}
} );
}

答案 1 :(得分:0)

请尝试以下代码

class ListViewAdapter extends ResourceCursorAdapter {
Context mContext;
ListViewAdapter(Context context, int layout, Cursor c) {
 super(context, layout, c);
this.mContext=context;
 }
}

edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage("Hello")
        .setPositiveButton("Start", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {

                Intent intent = new Intent(mContext, Consultation.class);

                startActivity(intent);

            }
        })
        .setNegativeButton("Edit", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {


                Intent intent = new Intent(mContext, AddPatient.class);

                startActivity(intent);
            }
        })
        .setNeutralButton("Cancel",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
            }
        });
AlertDialog d = builder.create();
d.setTitle("Patient Details");
d.show();
d.setCancelable(false);
 }
});

相反, MainActivity.This getApplicationContext()使用 mContext