【发布时间】:2014-10-12 17:30:10
【问题描述】:
已编辑帖子
我正在尝试为 android 做某种 MVC,但很多教程使用 Activity 作为 View。我会使用Activity 作为控制器。
为此,我必须创建自己的类来扩展View 类。简单的部分是当 Controller 是 Activity 因为我可以做这样的事情:
public class MyView extends View
{
public MyView(Activity activity)
{
activity.setContentView(R.layout.my_view);
}
}
现在,问题是当 Controller 是 Fragment 时,因为我不能使用 setContentView() 方法。对于片段,您必须在 onCreateView() 方法中对 View 进行膨胀。现在,我这样实现这个方法:
public class MyFragment extends Fragment {
private MyView myView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
myView = MyView.load(container.getContext);
return myView;
}
}
MyView 类看起来像这样:
public class MyView extends FrameLayout {
static public MyView load(Context context)
{
return (MyView) inflate(context, R.layout.my_fragment, new MyView(context);
}
public MyView(Context context)
{
super(context);
}
}
(它扩展了FrameLayout,因为inflate()方法使用ViewGroup作为参数,而FrameLayout扩展了ViewGroup,它很容易使用。)
现在,我的问题是:
你有更好的主意来设置片段的内容吗?不使用addView()方法,可以在MyView类的构造函数中设置片段的内容吗?
原帖
与其解释我的问题,不如在这里我想做的:
public class MyView extends View
{
public MyView(View v) {
this = v;
}
}
但是,不幸的是,这是未经授权的,因为您无法设置“this”关键字。 所以,现在,我正在做类似的事情:
public class MyView extends FrameLayout
{
public MyView(Context context, View v)
{
super(context);
addView(v);
}
}
它有效,但我不太喜欢这个解决方案,因为您必须将 ID 和来自视图“v”的所有内容设置为这个新视图(例如 this.setId(v.getId); 等)...
你有更好的主意来做我想做的事吗?
【问题讨论】:
-
解释你的问题会更好,很难理解
-
这是不可能的。
-
当然可以,给我第二个 OP,我正在写答案
-
"你有更好的主意来做我想做的事吗?"你还没有真正解释你想要达到的目标,只是你到目前为止所采取的方法。退后一步,描述一下您开始查看此内容的最初原因。
-
您应该完成一些介绍性的 OOP 和 Java 教程。如果你不明白为什么不能分配
this,那么你还没有准备好构建应用程序。
标签: java android model-view-controller view