ShowDialog in Button Adapter Listview

I have a listView like THIS

enter image description here

I need it when I hit the delete button. it shows dialogue like this image

enter image description here

so when I press YES. it will be removed from the list.

here's my code ..

public class customadapter extends BaseAdapter{ 

ArrayList<HashMap<String, String>> oslist;
Context context;
private Button btnDelete;
private Button btnEdit;
AlertDialog.Builder alertDialogBuilder;

public customadapter(ArrayList<HashMap<String, String>> oslist,Context context) {  
    System.out.println("skdjfhksdfjskfjhsdkjfh");
    this.context = context;
    this.oslist = oslist;

}

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

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return oslist.get(position);
}

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

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    System.out.println("oslist oslist = "+oslist);
    System.out.println("oslist 1 = "+oslist);
    System.out.println("oslist size = "+oslist.size());
    System.out.println("oslist oslist = "+oslist.getClass());
    System.out.println("position = "+position);
    System.out.println("convertView = "+convertView);
    System.out.println("parent = "+parent);

    System.out.println("position =  "+position);





    LayoutInflater lif = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = lif.inflate(R.layout.listitem, null);

    TextView id = (TextView) convertView.findViewById(R.id.varId);  
    TextView noNota = (TextView) convertView.findViewById(R.id.varNoNota);
    TextView senderName = (TextView) convertView.findViewById(R.id.varSenderName);
    TextView totalAmount = (TextView) convertView.findViewById(R.id.varTotalAmount);

    id.setText(oslist.get(position).get("id"));
    noNota.setText(oslist.get(position).get("noNota"));
    senderName.setText(oslist.get(position).get("senderName"));
    totalAmount.setText(oslist.get(position).get("totalAmount"));   

    Button btnEdit = (Button) convertView.findViewById(R.id.btnEdit);
    Button btnDelete = (Button) convertView.findViewById(R.id.btnDelete);
    btnEdit.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(context, "Edit ditekan!", Toast.LENGTH_LONG).show();
            //I want show YES NO dialog here.           
        }
    });

    btnDelete.setOnClickListener(new OnClickListener() {                
        @Override
        public void onClick(View v) {
            //I want show YES NO dialog here
        }
    });   

    return convertView;
}

      

}

how can i do this to create a dialogue like this. I have tried this code

final Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.custom);
                dialog.setTitle("Title...");

                // set the custom dialog components - text, image and button
                TextView text = (TextView) dialog.findViewById(R.id.text);
                text.setText("Android custom dialog example!");
                ImageView image = (ImageView) dialog.findViewById(R.id.image);
                image.setImageResource(R.drawable.ic_launcher); //line 115

                Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
                // if button is clicked, close the custom dialog
                dialogButton.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });

                dialog.show();

      

but its success.

i got this error

enter image description here

+3


source to share


5 answers


Create interface

:

public interface OnDeleteListener {
    public void onDelete(String message);
}

      

When initializing, customadapter

send OnDeleteListener

as a parameter:

private OnDeleteListener mListener;
public customadapter(ArrayList<HashMap<String, String>> oslist,Context context, OnDeleteListener mListener) {  
    this.context = context;
    this.oslist = oslist;
    this.mListener = mListener;
}

      

and then delete button click

check listener

whether to activate it or not:

 btnDelete.setOnClickListener(new OnClickListener() {                
        @Override
        public void onClick(View v) {
            //I want show YES NO dialog here
            if(mListener != null)
              mListener.onDelete("The message you want to show");
        }
    });  

      



and finally initialize

in your activity/fragment

and on listener invoke

show Dialog

:

customadaper mAdapter = new customadapter(ArrayList<HashMap<String, String>> oslist,Context context, new OnDeleteListener(){
   @Override
   public void onDelete(String msg){
    //Show your dialog here
    //msg - you can send any parameter or none of them through interface just as an example i send a message to show
    showDialog(msg);
}
});

      

You can create a separate function to clean up your code and call it whenever you want to use

(also note that custom dialog

you need inflate

it to create it (which is probably why you get the error))
:

private void showDialog(String message){
// set the custom dialog components - text, image and button
inflater = mInflater.inflate(R.layout.your_custom_dialog, null, false);
TextView text = (TextView) inflater.findViewById(R.id.text);
text.setText(message);
ImageView image = (ImageView) inflater.findViewById(R.id.image);
image.setImageResource(R.drawable.ic_launcher); //line 115

AlertDialog.Builder mDialogBuilder = new AlertDialog.Builder(context);
             mDialogBuilder.setView(viewFilterDialog);
             mDialogBuilder.setCancelable(true);
mDialogBuilder.setTitle(mRes.getString(R.string.dialog_title_filter));
             ...

final AlertDialog mAlertDialog = mDialogBuilder.create();
mAlertDialog.show();

      

note: I have hardcoded this answer so that anysyntax error

+5


source


try this code. For the dialog, you need to use the application context, not the application.



final Dialog dialog = new Dialog(youractivity.this);
dialog.setContentView(R.layout.custom);

      

+2


source


perform this operation first.

list.setAdapter(new customadapter(oslist,getApplicationContext(),registerItem.this));

      

then get parent activity like this.

private Activity parentActivity;
    private Button btnDelete;
    private Button btnEdit;

    AlertDialog.Builder alertDialogBuilder;

    public customadapter(ArrayList<HashMap<String, String>> oslist,Context context, Activity parentactivity) {  
        System.out.println("skdjfhksdfjskfjhsdkjfh");
        this.context = context;
        this.oslist = oslist;
        this.parentActivity = parentactivity;

    }

      

and create a dialog builder like this.

final Dialog dialog = new Dialog(parentActivity);

      

0


source


You can also do this in action. For adapter code, add tags to your button to determine which button is clicked. You can also set position as tag.

Button btnEdit = (Button) convertView.findViewById(R.id.btnEdit);
Button btnDelete = (Button) convertView.findViewById(R.id.btnDelete);

btnEdit.setTag(oslist.get(position).get("id"),R.id.varId);
btnDelete .setTag(oslist.get(position).get("id"),R.id.varId);

      

You can add this to the xml for your custom dialog. android: onclick = "deleteMethod"

Write your method in action like this:

public void deleteMethod(View v)
{
// Get your id or position for which delete button was pressed
 String id=v.getTag().toString();

 new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Do you really want to delete ?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {
        Toast.makeText(MainActivity.this, "Deleting...", Toast.LENGTH_SHORT).show();
// You know which item to delete from id / position. delete here.
    }})
 .setNegativeButton(android.R.string.no, null).show();



}

      

0


source


I think there is an easy way to do this, in my case I followed this code. write a method alertMessage()

and call this inside your button listening code

btnDelete.setOnClickListener(new OnClickListener() {                
        @Override
        public void onClick(View v) {
            //I want show YES NO dialog here
              alertMessage();
        }
    }); 



public void alertMessage() { 
    DialogInterface.OnClickListener dialogClickListener = new  DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) { 
      switch (which) { 
         case DialogInterface.BUTTON_POSITIVE: // Yes button clicked 
            Toast.makeText(AlertDialogActivity.this, "Yes Clicked",
                             Toast.LENGTH_LONG).show(); 
             // set your own logic for removal item from listview      
             break; 

            case DialogInterface.BUTTON_NEGATIVE: // No button clicked // do nothing 
             Toast.makeText(AlertDialogActivity.this, "No Clicked", 
                              Toast.LENGTH_LONG).show();    
             break; 
          } 
        } 
    }; 

   AlertDialog.Builder builder = new AlertDialog.Builder(this);  
   builder.setMessage("Are you sure?") 
           .setPositiveButton("Yes", dialogClickListener) 
           .setNegativeButton("No", dialogClickListener).show(); 
}

      

Dialogue

will reject itself after pressing the "YES" or "NO" button. You have nothing to do

0


source







All Articles