通过单击列表适配器内的按钮编辑 EditText Android
Edit EditText from button click inside a List Adapter Android
我有一个 ListView 和它下面的一些 EditText。列表中的每一行都有一个编辑按钮,单击该按钮应填满列表视图下方的 EditText。现在的问题是我有一个为 ListView 定义的自定义适配器。当我在 Adapter class 中膨胀布局而我的 EditTexts 在另一个中时,如何在单击 ListView 行内的按钮时填充 EditText?
编辑
这是我的适配器代码
public class CompleteCommentsAdapter : BaseAdapter
{
private Activities.CommentListActivity commentListActivity;
private List<Comments> dummyCommentList;
private TextView txtUserName;
private TextView txtCommentTime;
private ImageView imgUserImage;
private TextView txtCommentText;
private ImageButton ibtnEdit;
private ImageButton itbtnDelete;
public CompleteCommentsAdapter(Activities.CommentListActivity commentListActivity, List<Comments> dummyCommentList)
{
// TODO: Complete member initialization
this.commentListActivity = commentListActivity;
this.dummyCommentList = dummyCommentList;
}
public override int Count
{
get { return dummyCommentList.Count(); }
}
public override Java.Lang.Object GetItem(int position)
{
return position;
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = commentListActivity.LayoutInflater.Inflate(Resource.Layout.comment_list_row, null);
txtUserName = convertView.FindViewById<TextView>(Resource.Id.txtCommenterName);
txtCommentTime = convertView.FindViewById<TextView>(Resource.Id.txtCommenterTime);
imgUserImage = convertView.FindViewById<ImageView>(Resource.Id.imgProfileUserImage);
txtCommentText = convertView.FindViewById<TextView>(Resource.Id.txtCommentText);
ibtnEdit = convertView.FindViewById<ImageButton>(Resource.Id.imgBtnEdit);
itbtnDelete = convertView.FindViewById<ImageButton>(Resource.Id.imgBtnDelete);
}
Comments mComments = dummyCommentList.ElementAt(position);
txtUserName.Text = mComments.UserName;
txtCommentTime.Text = mComments.CommentTime;
txtCommentText.Text = mComments.CommentText;
ibtnEdit.Click += ibtnEdit_Click;
return convertView;
}
void ibtnEdit_Click(object sender, EventArgs e)
{
}
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = commentListActivity.LayoutInflater.Inflate(Resource.Layout.comment_list_row, null);
txtUserName = convertView.FindViewById<TextView>(Resource.Id.txtCommenterName);
txtCommentTime = convertView.FindViewById<TextView>(Resource.Id.txtCommenterTime);
imgUserImage = convertView.FindViewById<ImageView>(Resource.Id.imgProfileUserImage);
txtCommentText = convertView.FindViewById<TextView>(Resource.Id.txtCommentText);
ibtnEdit = convertView.FindViewById<ImageButton>(Resource.Id.imgBtnEdit);
itbtnDelete = convertView.FindViewById<ImageButton>(Resource.Id.imgBtnDelete);
}
Comments mComments = dummyCommentList.ElementAt(position);
txtUserName.Text = mComments.UserName;
txtCommentTime.Text = mComments.CommentTime;
txtCommentTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//do what you want here
}
});
return convertView;
}
编辑按钮:
ibtnEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txtUserName.setText("");
txtCommentTime.setText("");
txtCommentText.setText("");
}
});
如果监听器必须附加到按钮,而不是整行,您可以将对那些编辑文本的引用传递给适配器。或者,您可以在您的应用程序中构建一个 EventBus,通过不同的 类.
发送点击的文本
我有一个 ListView 和它下面的一些 EditText。列表中的每一行都有一个编辑按钮,单击该按钮应填满列表视图下方的 EditText。现在的问题是我有一个为 ListView 定义的自定义适配器。当我在 Adapter class 中膨胀布局而我的 EditTexts 在另一个中时,如何在单击 ListView 行内的按钮时填充 EditText?
编辑
这是我的适配器代码
public class CompleteCommentsAdapter : BaseAdapter
{
private Activities.CommentListActivity commentListActivity;
private List<Comments> dummyCommentList;
private TextView txtUserName;
private TextView txtCommentTime;
private ImageView imgUserImage;
private TextView txtCommentText;
private ImageButton ibtnEdit;
private ImageButton itbtnDelete;
public CompleteCommentsAdapter(Activities.CommentListActivity commentListActivity, List<Comments> dummyCommentList)
{
// TODO: Complete member initialization
this.commentListActivity = commentListActivity;
this.dummyCommentList = dummyCommentList;
}
public override int Count
{
get { return dummyCommentList.Count(); }
}
public override Java.Lang.Object GetItem(int position)
{
return position;
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = commentListActivity.LayoutInflater.Inflate(Resource.Layout.comment_list_row, null);
txtUserName = convertView.FindViewById<TextView>(Resource.Id.txtCommenterName);
txtCommentTime = convertView.FindViewById<TextView>(Resource.Id.txtCommenterTime);
imgUserImage = convertView.FindViewById<ImageView>(Resource.Id.imgProfileUserImage);
txtCommentText = convertView.FindViewById<TextView>(Resource.Id.txtCommentText);
ibtnEdit = convertView.FindViewById<ImageButton>(Resource.Id.imgBtnEdit);
itbtnDelete = convertView.FindViewById<ImageButton>(Resource.Id.imgBtnDelete);
}
Comments mComments = dummyCommentList.ElementAt(position);
txtUserName.Text = mComments.UserName;
txtCommentTime.Text = mComments.CommentTime;
txtCommentText.Text = mComments.CommentText;
ibtnEdit.Click += ibtnEdit_Click;
return convertView;
}
void ibtnEdit_Click(object sender, EventArgs e)
{
}
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = commentListActivity.LayoutInflater.Inflate(Resource.Layout.comment_list_row, null);
txtUserName = convertView.FindViewById<TextView>(Resource.Id.txtCommenterName);
txtCommentTime = convertView.FindViewById<TextView>(Resource.Id.txtCommenterTime);
imgUserImage = convertView.FindViewById<ImageView>(Resource.Id.imgProfileUserImage);
txtCommentText = convertView.FindViewById<TextView>(Resource.Id.txtCommentText);
ibtnEdit = convertView.FindViewById<ImageButton>(Resource.Id.imgBtnEdit);
itbtnDelete = convertView.FindViewById<ImageButton>(Resource.Id.imgBtnDelete);
}
Comments mComments = dummyCommentList.ElementAt(position);
txtUserName.Text = mComments.UserName;
txtCommentTime.Text = mComments.CommentTime;
txtCommentTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//do what you want here
}
});
return convertView;
}
编辑按钮:
ibtnEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txtUserName.setText("");
txtCommentTime.setText("");
txtCommentText.setText("");
}
});
如果监听器必须附加到按钮,而不是整行,您可以将对那些编辑文本的引用传递给适配器。或者,您可以在您的应用程序中构建一个 EventBus,通过不同的 类.
发送点击的文本