【发布时间】:2017-01-28 20:00:56
【问题描述】:
我正在尝试将一些视图从抽象 ClassB 传递给 ClassA,以便 ClassA 可以使用:ClassA extends ClassB
我不想对每个视图都使用类似的东西来继承/传递:
protected View getView1() {
return view1;
}
我想要一种批量方式让 ClassX(在本例中为 ClassA)知道它应该使用哪些视图。但保留一些视图私有给 ClassB 自己使用。
下面的代码确实有效,但可以这样做吗?还是有更好的方法?
public abstract class ClassB extends Activity {
abstract void useTheseViews(View view1, View view2);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View view1 = findViewById(R.id.view1);
View view2 = findViewById(R.id.view2);
useTheseViews(view1, view2);
View view3 = findViewById(R.id.view3);
view3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// do something independent here
}
});
}
}
public class ClassA extends ClassB {
private View view1, view2;
@Override
void useTheseViews(View view1, View view2) {
this.view1 = view1;
this.view2 = view2;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view1.setOnClickListener(..);
view2.setOnClickListener(..);
}
}
原因? ClassA 和 ClassX 使用相同的基本布局,但在相同的视图上执行不同的功能。
我的 ClassB 拥有一个基本布局并初始化视图(按钮、开关......),并为自己使用一些视图,而不管它扩展了哪个类。
【问题讨论】:
-
为什么不直接使用片段呢?这是编写活动的更好方式。
-
如果您展示一些屏幕截图或每个屏幕的模型,这将有助于我们更好地了解您在做什么。正如 Anix 所提到的,使用 Fragments 而不是活动可能会更好。
-
使用 Fragments,您可以以模块化的方式编写您的 Activity,使用继承,您可以使用分层的方式编写您的 Activity,我看不出 Fragment 将如何解决这里的问题
标签: java android inheritance abstract-class