如何在android中将变量或对象传递给对话框

时间:2012-03-31 13:34:53

标签: android customdialog

我有一个带有一个editText视图的自定义对话框,两个按钮确定并取消。我有一个自定义列表视图,显示从数据库中提取的一些数据行。当用户单击列表视图的行时,将向用户显示自定义对话框以编辑所选行。我想要做的是能够将与所选行绑定的对象传递到对话框,以便我可以显示正在编辑的数据。

这是我的活动课程:

public class TestDatabaseActivity extends ListActivity {
private CommentsDataSource datasource;
private CommentAdapter adt;

static final int CUSTOM_DIALOG_ID = 0;
private TextView dialog_editComment;
private EditText dialog_txtEditComment;
private Button dialog_btnOk, dialog_btnCancel;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    datasource = new CommentsDataSource(TestDatabaseActivity.this);
    datasource.open();
    getList();
}
private void getList()
{
    List<Comment> values = datasource.getAllComments();
    adt=new CommentAdapter(TestDatabaseActivity.this,R.layout.comment_row,values);
    setListAdapter(adt);    
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    CommentAdapter adapter= (CommentAdapter) getListAdapter();
    final Comment cmt = adapter.mListComment.get(position);
    System.out.println(cmt.getId()+cmt.getComment());

            //cmt is the object which i want to pass to my dialog
    showDialog(CUSTOM_DIALOG_ID);

}

   private Button.OnClickListener customDialog_UpdateOnClickListener = new Button.OnClickListener(){

 @Override
 public void onClick(View arg0) {
  // TODO Auto-generated method stub
  //save the value and update list
 }

   };

   private Button.OnClickListener customDialog_DismissOnClickListener
   = new Button.OnClickListener(){

 @Override
 public void onClick(View arg0) {
  // TODO Auto-generated method stub
  dismissDialog(CUSTOM_DIALOG_ID);
 }

   };

@Override
protected Dialog onCreateDialog(int id) {
 // TODO Auto-generated method stub
 Dialog dialog = null;;
    switch(id) {
    case CUSTOM_DIALOG_ID:
     dialog = new Dialog(TestDatabaseActivity.this);

     dialog.setContentView(R.layout.comment_edit_dialog);
     dialog.setTitle("Edit");

     dialog_editComment = (TextView)dialog.findViewById(R.id.editComment);
     dialog_txtEditComment = (EditText)dialog.findViewById(R.id.txtComment);
     dialog_btnOk = (Button)dialog.findViewById(R.id.btnOk);
     dialog_btnCancel = (Button)dialog.findViewById(R.id.btnCancel);

     dialog_btnOk.setOnClickListener(customDialog_UpdateOnClickListener);
     dialog_btnCancel.setOnClickListener(customDialog_DismissOnClickListener);
     break;
    }
    return dialog;
}
}

2 个答案:

答案 0 :(得分:1)

您可以使用参数创建自己的方法,而不是使用showDialog(CUSTOM_DIALOG_ID),您可以使用AlertDialog显示包含textview和按钮的视图。

i)   private AlertDialog alert;   should be declared in class scope above oncreate().

ii)使用createDialog(cmt)而不是showDialog(CUSTOM_DIALOG_ID)

iii) private void createDialog(Comment cmt){
        AlertDialog.Builder dialog = new AlertDialog.Builder(TestDatabaseActivity.this);
        View view = _inflater.inflate(R.layout.comment_edit_dialog,null);
        dialog.setTitle("Edit");

        dialog_editComment = (TextView)view .findViewById(R.id.editComment);
        dialog_txtEditComment = (EditText)dialog.findViewById(R.id.txtComment);
        dialog_btnOk = (Button)view .findViewById(R.id.btnOk);
        dialog_btnCancel = (Button)view .findViewById(R.id.btnCancel);

        dialog_btnOk.setOnClickListener(customDialog_UpdateOnClickListener);
        dialog_btnCancel.setOnClickListener(customDialog_DismissOnClickListener);
        dialog.setView(view);
        //dialog.show();
        alert = dialog.create();
        alert.show();
    }

iV)也代替dismissDialog(CUSTOM_DIALOG_ID)使用alert.dismiss();

答案 1 :(得分:0)

Also another solution to your problem is change the scope of cmt.  

i.e., Above onCreate() declare 

private Comment cmt; 

now it can be access the TestDatabaseActivity. in your code make a minor change and try 

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    CommentAdapter adapter= (CommentAdapter) getListAdapter();
    cmt = adapter.mListComment.get(position);
    System.out.println(cmt.getId()+cmt.getComment());

            //cmt is the object which i want to pass to my dialog
    showDialog(CUSTOM_DIALOG_ID);
}

also declare private Comment cmt = null; above oncreate() and then in onCreateDialog() you can access 

System.out.println(cmt.getId()+cmt.getComment());

Try .....