gpt4 book ai didi

java - 允许从 OnClickListener 非最终变量修改对象

转载 作者:太空狗 更新时间:2023-10-29 15:56:29 26 4
gpt4 key购买 nike

我有一个适配器,我可以在其中加载我的用户和一个用于发送邀请的按钮/文本文件。在适配器中我这样做:

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
UserAgenda ua = getItem(position);

ViewHolder holder;
if (convertView == null) {
//...
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

if(ua.getInvited() != null){
if(ua.getInvited().equals("true")){
addTextViewInvited(convertView);//add a textview as the user is invited
}
else if(ua.getInvited().equals("false")){
addButton2Invite(convertView,ua);//add the button to invite
}
}
return convertView;
}

在 addButton2Invite 方法中,我将邀请发送为:

   private void addButton2Invite(final View convertView, UserAgenda ua) {       

bt2Invited.setOnClickListener(new OnClickListener() {

@Override
public void onClick(final View v) {

final Button bt2Invited = (Button) convertView.findViewById(R.id.bt2invite);
final ProgressBar pbar = (ProgressBar) convertView.findViewById(R.id.progress);
new Thread(){
@Override
public void run() {
if(networkWork())
ua.setInvited("true"); //Error, NOT PERMITED! ua need to be final.
};
}.start();
}
});
}

当 networkWork 正常时,我想设置 ua.setInvited("true"); 但如果我不将 ua 声明为 final 则不允许这样做。但是后来我无法更改它的值,下次适配器进入 getView 时会发现 ua.getInvited() = "false"。当我向下/向上滚动 TextView 时,按钮出现在该行上。

onClicklistener 中更改对象 UserAgenda ua 的值有什么想法吗?

谢谢!

最佳答案

声明 ua final 因为当在 ua.setInvited(true);您正在更改 ua 引用的对象中的值而不是 ua 的引用,因此通过设置 ua final 不会影响您的 setInvited(true)

否则你必须通过在你的 Activity 类中实现它来使用点击监听器

public MyActivity extends Activity implements OnClickListener

和使用

myView.setOnClickListener(this);

和实现方法

public void onClick(View v)
{
switch (v.getId())
{
case R.id.myView:
//functionality for on click
break;
}
}

关于java - 允许从 OnClickListener 非最终变量修改对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com