0

我有一个问题,如果我有:

扩展 y 的 x 类

和扩展 Fragment 的 y 类

我希望能够在 x 中做一些事情,例如获取带有 ID 的文本视图并更改文本。要做到这一点,我必须获得观点,但我遇到了问题。我尝试过 Super.getView,并尝试将视图保存在 y 中并从 x 访问,但它不起作用。

为什么是这样?

编辑:示例代码:

public x extends fragment{

}

public y extends x{
    public y(){
         eg TextView t = this.getView().getById(...)
         which will fail as cant get the view
    }
}
4

1 回答 1

0

我会将其保存TextView为扩展片段的类中的受保护变量,以便您可以从其子类访问它:

public class x extends Fragment {
    protected TextView myTextView;

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        myTextView = view.findViewById(...);
    }
}

public class y extends x {
    public void y() {
        if (myTextView != null) {
            myTextView...
        }
    }
}

请记住,它只会onViewCreated在该片段上调用 ​​myTextView 后分配,但您可以在执行任何操作之前检查它是否已定义(它不为空)。

PS:在扩展的情况下,Activity可以onCreate通过调用该findViewById活动的方法在方法中分配它:

public class x extends Activity {
    protected TextView myTextView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ....

        myTextView = findViewById(...);
    }
}
于 2019-10-31T15:12:56.760 回答