我有一个带有一个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;
}
}
答案 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 .....