有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Handler从其他类编辑TextView?

我试图编辑另一个类的文本视图

这是一个RecyclerView适配器。当我点击“删除”时,服务器被删除。此外,一些按钮和文本应该在UI上不可见

protected MainActivity context;

public ContactsAdapter(Context context){
    this.context = (MainActivity) context;
}

public void onBindViewHolder(ContactsAdapter.ViewHolder viewHolder,final int position) {

...

final Handler mHandler = new Handler();

new Thread(new Runnable() {
@Override
public void run () {

mHandler.post(new Runnable() {
@Override
public void run () {
TextView commandrun = (TextView) context.findViewById(R.id.command_run);         
commandrun.setVisibility(View.INVISIBLE);
}
});
}
}).start();

事实上我得到了java.lang.NullPointerException: Attempt to invoke virtual method '安卓.view.View com.minvercraft.minvercraftfree.MainActivity.findViewById(int)' on a null object reference


共 (2) 个答案

  1. # 1 楼答案

    你不需要训练员。您可以将接口传递给适配器,并在活动(您提到的其他类)中侦听接口,然后更改textView

    public interface ChangeVisibility {
    void change(boolean visibility);
    }
    

    然后将此接口传递给适配器

    public ContactsAdapter(Context context,ChangeVisibility 
    changeVisibility){
    this.context = (MainActivity) context;
    this.changeVisibility = changeVisibility;
    }
    

    然后,当您单击适配器中的删除按钮时,必须调用

    changeVisibility.change(true);
    

    然后在传递接口的另一个类中,可以监听change方法并根据需要设置可见性

  2. # 2 楼答案

    很明显,你的观点是无效的。因此,如果在错误的位置调用findViewById,则必须在创建该视图的上下文中调用该方法

    似乎视图不在您的上下文中(例如活动)