2013-11-27 63 views
1

我正在开发一个应用程序,它从Web服务获取数据并将其显示在列表视图中。我正在使用自定义列表视图适配器。在列表的一行中有两个按钮。我想显示一个对话框,当一个按钮click.and也当一个对话框按钮按下时,我想对它做一些操作。在自定义列表视图项中单击的对话框

这里是我的适配器类:

public class NewsRowAdapter extends BaseAdapter { 

private Context mContext; 
private Activity activity; 
private static LayoutInflater inflater=null; 
private ArrayList<HashMap<String, String>> data; 
int resource; 
    //String response; 
    //Context context; 
    //Initialize adapter 
    public NewsRowAdapter(Context ctx,Activity act, int resource,ArrayList<HashMap<String, String>> d, DialogCreatorInterface di) { 
     super(); 
     this.resource=resource; 
     this.data = d; 
     this.activity = act; 
     this.mContext = ctx; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 



    public interface DialogCreatorInterface{ 
     public void showDialog(); 
    } 


    DialogCreatorInterface dialogCreatorInterface = new DialogCreatorInterface() { 

     @Override 
     public void showDialog() { 
      //Create and show the dialog code 
      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext); 
      alertDialogBuilder.setTitle("Your Title"); 

      // set dialog message 
      alertDialogBuilder 
       .setMessage("Click yes to exit!") 
       .setCancelable(false) 
       .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog,int id) { 
         // if this button is clicked, close 
         // current activity 
         //MainActivity.this.finish(); 

         Toast.makeText(mContext, "Yes clicked", Toast.LENGTH_LONG).show(); 
        } 
        }) 
        .setNegativeButton("No",new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog,int id) { 
          // if this button is clicked, just close 
          // the dialog box and do nothing 
          dialog.cancel(); 
         } 
        }); 
      AlertDialog alertDialog = alertDialogBuilder.create(); 

      // show it 
      alertDialog.show(); 

     } 
    }; 

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 


    View vi = convertView; 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.row,null); 

     TextView firstname = (TextView) vi.findViewById(R.id.fname); 
     TextView lastname = (TextView) vi.findViewById(R.id.lname); 
     TextView startTime = (TextView) vi.findViewById(R.id.stime); 
     TextView endTime = (TextView) vi.findViewById(R.id.etime); 
     TextView date = (TextView) vi.findViewById(R.id.blank); 
     ImageView img = (ImageView) vi.findViewById(R.id.list_image); 


     HashMap<String, String> song = new HashMap<String, String>(); 
     song =data.get(position); 

     firstname.setText(song.get(MainActivity.TAG_PROP_FNAME)); 
     lastname.setText(song.get(MainActivity.TAG_PROP_LNAME)); 
     startTime.setText(song.get(MainActivity.TAG_STIME)); 
     endTime.setText(song.get(MainActivity.TAG_ETIME)); 
     date.setText(song.get(MainActivity.TAG_DATE)); 
     //imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), img); 

     Button accept = (Button) vi.findViewById(R.id.button1); 
     accept.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       final int x = (int) getItemId(position); 
       //Toast.makeText(parent.getContext(),"you clicked "+ x , Toast.LENGTH_SHORT).show(); 


       /*Intent zoom=new Intent(mContext, Profile.class); 
       zoom.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
       zoom.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       mContext.startActivity(zoom);*/ 


       //dialogCreatorInterface.showDialog(); 





      } 
     }); 

     vi.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //Toast.makeText(parent.getContext(), "view clicked: " , Toast.LENGTH_SHORT).show(); 



       Intent zoom=new Intent(parent.getContext(), Profile.class); 
       parent.getContext().startActivity(zoom); 


      } 
     }); 

     return vi; 


} 



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



@Override 
public Object getItem(int possision) { 
    // TODO Auto-generated method stub 
    return possision; 
} 



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

我曾尝试一些有dialoginterface..but我couldnt't处理这件事......请有人帮助我..

编辑

这是我Getview方法目前

public View getView(final int position, View convertView, final ViewGroup parent) { 


    View vi = convertView; 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.row,null); 

     TextView firstname = (TextView) vi.findViewById(R.id.fname); 
     TextView lastname = (TextView) vi.findViewById(R.id.lname); 
     TextView startTime = (TextView) vi.findViewById(R.id.stime); 
     TextView endTime = (TextView) vi.findViewById(R.id.etime); 
     TextView date = (TextView) vi.findViewById(R.id.blank); 
     ImageView img = (ImageView) vi.findViewById(R.id.list_image); 


     HashMap<String, String> song = new HashMap<String, String>(); 
     song =data.get(position); 

     firstname.setText(song.get(MainActivity.TAG_PROP_FNAME)); 
     lastname.setText(song.get(MainActivity.TAG_PROP_LNAME)); 
     startTime.setText(song.get(MainActivity.TAG_STIME)); 
     endTime.setText(song.get(MainActivity.TAG_ETIME)); 
     date.setText(song.get(MainActivity.TAG_DATE)); 
     //imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), img); 

     Button accept = (Button) vi.findViewById(R.id.button1); 
     accept.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       final int x = (int) getItemId(position); 
       //Toast.makeText(parent.getContext(),"you clicked "+ x , Toast.LENGTH_SHORT).show(); 


       /*Intent zoom=new Intent(mContext, Profile.class); 
       zoom.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
       zoom.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       mContext.startActivity(zoom);*/ 


       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext); 

       alertDialogBuilder.setTitle("Your Title"); 
       alertDialogBuilder 
        .setMessage("Click yes to exit!") 
        .setCancelable(false) 
        .setPositiveButton("YES", new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // TODO Auto-generated method stub 
          Toast.makeText(mContext, "Yes clicked", Toast.LENGTH_LONG).show(); 
         } 
        }) 
        .setNegativeButton("NO", new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // TODO Auto-generated method stub 
          dialog.cancel(); 
         } 
        }); 

       alertDialogBuilder.show(); 

      } 
     }); 

     vi.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //Toast.makeText(parent.getContext(), "view clicked: " , Toast.LENGTH_SHORT).show(); 



       Intent zoom=new Intent(parent.getContext(), Profile.class); 
       parent.getContext().startActivity(zoom); 


      } 
     }); 

     return vi; 


} 
+0

删除该接口的东西。只需将showDialogue逻辑作为现在在界面中的单独方法编写即可。并在按钮被点击时调用该方法。您已经编写了onClick事件。 –

+0

我已经尝试过你所说的..但有同样的问题:( –

+0

删除AlertDialog alertDialog = alertDialogBu​​ilder.create();和alertDialog.show();。只需使用alertDialogBu​​ilder.show();它将工作 –

回答

0

试试这个..

public class NewsRowAdapter extends BaseAdapter { 

private Context mContext; 
private Activity activity; 
private static LayoutInflater inflater=null; 
private ArrayList<HashMap<String, String>> data; 
int resource; 
    //String response; 
    //Context context; 
    //Initialize adapter 
    public NewsRowAdapter(Context ctx,Activity act, int resource,ArrayList<HashMap<String, String>> d, DialogCreatorInterface di) { 
     super(); 
     this.resource=resource; 
     this.data = d; 
     this.activity = act; 
     this.mContext = ctx; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    }   

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 


    View vi = convertView; 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.row,null); 

     TextView firstname = (TextView) vi.findViewById(R.id.fname); 
     TextView lastname = (TextView) vi.findViewById(R.id.lname); 
     TextView startTime = (TextView) vi.findViewById(R.id.stime); 
     TextView endTime = (TextView) vi.findViewById(R.id.etime); 
     TextView date = (TextView) vi.findViewById(R.id.blank); 
     ImageView img = (ImageView) vi.findViewById(R.id.list_image); 


     HashMap<String, String> song = new HashMap<String, String>(); 
     song =data.get(position); 

     firstname.setText(song.get(MainActivity.TAG_PROP_FNAME)); 
     lastname.setText(song.get(MainActivity.TAG_PROP_LNAME)); 
     startTime.setText(song.get(MainActivity.TAG_STIME)); 
     endTime.setText(song.get(MainActivity.TAG_ETIME)); 
     date.setText(song.get(MainActivity.TAG_DATE)); 
     //imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), img); 

     Button accept = (Button) vi.findViewById(R.id.button1); 
     accept.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       final int x = (int) getItemId(position); 
       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this); 

       // set title 
       alertDialogBuilder.setTitle("Your Title"); 

       // set dialog message 
       alertDialogBuilder 
       .setMessage("Click yes to exit!") 
       .setCancelable(false) 
       .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog,int id) { 
       Toast.makeText(mContext, "Yes clicked", Toast.LENGTH_LONG).show(); 


       }) 
       .setNegativeButton("No",new DialogInterface.OnClickListener() { 
        @SuppressLint("NewApi") 
        public void onClick(DialogInterface dialog,int id) { 

         dialog.cancel(); 

        } 
       }); 

       // create alert dialog 
       AlertDialog alertDialog = alertDialogBuilder.create(); 
       // show it 
       alertDialog.show();  
      } 
     }); 

     return vi; 
} 

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



@Override 
public Object getItem(int possision) { 
    // TODO Auto-generated method stub 
    return possision; 
} 



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

和你startActivity(zoom);Intent赖特在里面ID列表视图中单击像下面

listview.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View v, int position, 
        long id) { 
       Intent zoom=new Intent(Activity.this, Profile.class); 
       startActivity(zoom); 
      } 
     }); 
+0

我得到了这个错误在我的日志c在 android.view.WindowManager $ BadTokenException:无法添加窗口 - 标记null不适用于应用程序 –

+0

@ user3020939什么是行号。 – Hariharan

+0

alertDialog.show(); 这是行 –

相关问题