2015-05-08 2 views
3

У меня есть ListView, как THISShowDialog в кнопку Listview адаптер

enter image description here

я хочу, когда я нажимаю на удаление. это показывает диалоговое окно, как это изображение

enter image description here

так, когда я нажмите YES. он будет удален из списка.

вот мой код ..

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; 
} 

}

как я могу сделать, чтобы создать диалоговое окно, как that..i попробовал этот код

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(); 

но itsnt успех.

я получил эту ошибку

enter image description here

+1

Как вы получаете –

+0

Я уже обновляю свое сообщение ... i post log logc – akiong

+0

Что такое ваш номер строки 115 '' customadapter'? –

ответ

5

Создать interface:

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

При инициализации customadapter отправить OnDeleteListener в качестве параметра:

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

затем на delete button click проверки для listener ли активировать его или нет:

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"); 
     } 
    }); 

и, наконец initialize адаптер на activity/fragment и listener invoke показать 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); 
} 
}); 

Вы можете создать отдельную функцию для кода оформления и назовите его всякий раз, когда вы хотите использовать

(также обратите внимание, что для создания custom dialog у вас должно быть inflate это {вероятно, именно поэтому вы получаете сообщение об ошибке}):

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(); 

примечание: Я жёстко этот ответ так что любой syntax error может произойти

2

попробовать это code.For диалоговое окно, вы должны использовать данный вид деятельности экземпляр не контекста приложения.

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

Пройди эту деятельность следующим образом.

list.setAdapter(new customadapter(oslist,getApplicationContext(),registerItem.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; 

    } 

и установить диалог построитель, как это ..

final Dialog dialog = new Dialog(parentActivity); 
0

Вы также можете сделать это в деятельности. Для кода адаптера добавьте теги к вашей кнопке, чтобы определить, какая кнопка нажата. Вы также можете установить положение в качестве тега.

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

Вы можете добавить это в xml для своего настраиваемого диалога. андроида: OnClick = «Стирание»

Написать свой метод в деятельности, как это:

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

Я думаю, что есть простой способ сделать это, в моем случае я следовал этому коду. написать метод alertMessage() и называют это внутри кнопки коды слушателя диалог

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(); 
} 

уволит себя после кнопки пользователя нажмите кнопку «Да» или «Нет». Вам ничего не нужно делать

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