Android 如何在getView方法中通过单击按钮控制textview
我的应用程序有Listview,Listview项目有一个文本视图和一个按钮和其他图像等。。。 我使用的是ViewHolder模式 我想在单击按钮时更改TextView中的文本 如何在单击按钮时控制TextViewAndroid 如何在getView方法中通过单击按钮控制textview,android,Android,我的应用程序有Listview,Listview项目有一个文本视图和一个按钮和其他图像等。。。 我使用的是ViewHolder模式 我想在单击按钮时更改TextView中的文本 如何在单击按钮时控制TextView public class AListAdapter extends ArrayAdapter<MyData> { static class ViewHolder { TextView viewCountView; Image
public class AListAdapter extends ArrayAdapter<MyData> {
static class ViewHolder {
TextView viewCountView;
ImageButton myButton;
ImageView profileImageView;
}
public View getView(int position, View convertView, ViewGroup parent) {
final AListAdapter adapter = this;
ViewHolder holder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.cell parent, false);
TextView viewCountView = (TextView) convertView.findViewById(R.id._view_count_);
Button likeButton = (ImageButton) convertView.findViewById(R.id._like_button);
LoadImageView profileImageView = (LoadImageView) convertView.findViewById(R.id.albumlist_profile_image);
holder = new ViewHolder();
holder.viewCountView = viewCountView;
holder.likeButton = likeButton;
holder.profileImageView = profileImageView;
holder.likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// how to controll TextView??????????????????
// when click i want to change textview
//like holder.viewCountView.setText("clicked");
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
MyData data = (MyData) adapter.getItem(position);
if (data != null) {
holder.viewCountView.setText(String.valueOf(data.viewCount) + "views");
//image settings
}
return convertView;
}
公共类AListAdapter扩展了ArrayAdapter{
静态类视窗夹{
文本视图视图countview;
图像按钮myButton;
ImageView配置文件ImageView;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
最终AListAdapter=此;
ViewHolder=null;
if(convertView==null){
convertView=充气机充气(R.layout.cell父项,false);
TextView viewCountView=(TextView)convertView.findViewById(R.id.\u view\u count);
Button likeButton=(ImageButton)convertView.findViewById(R.id._like_按钮);
LoadImageView profileImageView=(LoadImageView)convertView.findViewById(R.id.albumlist\u profile\u image);
holder=新的ViewHolder();
holder.viewCountView=viewCountView;
holder.likeButton=likeButton;
holder.profileImageView=profileImageView;
holder.likeButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//如何控制文本视图??????????????????
//单击“我想更改文本视图”时
//像holder.viewCountView.setText(“单击”);
}
});
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
MyData=(MyData)adapter.getItem(位置);
如果(数据!=null){
holder.viewCountView.setText(String.valueOf(data.viewCount)+“views”);
//图像设置
}
返回视图;
}
在这种情况下,当调用onClickListener时,无法访问或使用局部变量,因为变量已经超出范围
因此,您也可以将ViewHolder
设置为按钮的标记,然后可以在onClick
处理程序中访问它
holder.likeButton.setTag(holder);
holder.likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder mH = (ViewHolder) v.getTag();
mH.viewCountView.setText("clicked");
}
});
在这种情况下,您无法访问或使用局部变量。在调用onClickListener时,变量可能已超出范围 因此,您也可以将
ViewHolder
设置为按钮的标记,然后可以在onClick
处理程序中访问它
holder.likeButton.setTag(holder);
holder.likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder mH = (ViewHolder) v.getTag();
mH.viewCountView.setText("clicked");
}
});
将此代码放在else()部分之后
这样
if (convertView == null) {
convertView = inflater.inflate(R.layout.cell parent, false);
TextView viewCountView = (TextView) convertView.findViewById(R.id._view_count_);
Button likeButton = (ImageButton) convertView.findViewById(R.id._like_button);
LoadImageView profileImageView = (LoadImageView) convertView.findViewById(R.id.albumlist_profile_image);
holder = new ViewHolder();
holder.viewCountView = viewCountView;
holder.likeButton = likeButton;
holder.profileImageView = profileImageView;
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
MyData data = (MyData) adapter.getItem(position);
if (data != null) {
holder.viewCountView.setText(String.valueOf(data.viewCount) + "views");
//image settings
}
holder.likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.viewCountView.setText("clicked");
}
});
return convertView;
将此代码放在else()部分之后
这样
if (convertView == null) {
convertView = inflater.inflate(R.layout.cell parent, false);
TextView viewCountView = (TextView) convertView.findViewById(R.id._view_count_);
Button likeButton = (ImageButton) convertView.findViewById(R.id._like_button);
LoadImageView profileImageView = (LoadImageView) convertView.findViewById(R.id.albumlist_profile_image);
holder = new ViewHolder();
holder.viewCountView = viewCountView;
holder.likeButton = likeButton;
holder.profileImageView = profileImageView;
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
MyData data = (MyData) adapter.getItem(position);
if (data != null) {
holder.viewCountView.setText(String.valueOf(data.viewCount) + "views");
//image settings
}
holder.likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.viewCountView.setText("clicked");
}
});
return convertView;
此viewCountView中有什么问题。setText(“单击”);此代码面临的错误是什么?此作用域无法访问viewHolder此viewCountView中有什么问题。setText(“单击”);此代码面临的错误是什么?此作用域无法访问viewHolder我尝试了您的答案,在“viewHolder mH=(ViewHolder)v.getTag();`我不确定这为什么不起作用,它应该能起作用。我以前用过它,你的代码看起来也不错。你能修复这个小错误,然后再试一次吗?(
Button likeButton=(ImageButton)convertView.findViewById(R.id.\u like_Button)
),它应该是像按钮一样的ImageButton=…
或两侧的按钮,这取决于您在xml代码中如何定义它。我会再试一次,成功。我不知道为什么不起作用……但感谢Ahmed!!!!!我尝试了您的答案,在“ViewHolder mH=(ViewHolder)v.getTag()上获取ClassCastExection`我不确定为什么这不起作用,它应该会起作用。我以前用过它,你的代码看起来也不错。你能修复这个小错误并重试吗?(Button likeButton=(ImageButton)convertView.findViewById(R.id.\u like_Button)
),它应该是ImageButton likeButton=…
或两侧的按钮,这取决于您在xml代码中如何定义它。我将再次尝试,成功。我不知道为什么不起作用…但感谢Ahmed!!!!!我尝试了您的,出现错误“无法在用不同方法定义的内部类中引用非最终变量variableName”我尝试了你的,得到错误“不能引用在不同方法中定义的内部类中的非最终变量variableName”