gpt4 book ai didi

java - 在类中设置 "this"

转载 作者:行者123 更新时间:2023-12-01 12:25:59 25 4
gpt4 key购买 nike

已编辑的帖子
我正在尝试为 android 做某种 MVC,但很多教程使用 Activity 作为 View。我将使用 Activity 作为 Controller

为此,我必须创建自己的类来扩展 View 类。最简单的部分是当 Controller 是一个 Activity 时,因为我可以做这样的事情:

public class MyView extends View
{
public MyView(Activity activity)
{
activity.setContentView(R.layout.my_view);
}
}

现在,问题是当 ControllerFragment 时,因为我无法使用 setContentView() 方法。对于 fragment ,您必须在 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 并且它很容易使用。)

现在,我的问题是:
您有更好的想法来设置 fragment 的内容吗?是否可以在 MyView 类的构造函数中设置 fragment 的内容,而不使用 addView() 方法?

原始帖子
我不想解释我的问题,而是想做什么:

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 和来自 View “v”的所有内容设置到这个新 View (例如 this.setId(v.getId) ); 等) ...

你有更好的主意来做我想做的事吗?

最佳答案

只需创建一个方法即可为您完成所有这些工作。

我不知道 View 类的所有属性,但假设您的属性是 ID、Name 和 Number,每个属性都有自己的 getter 和 setter...

public void transferInfo(View v)
{

this.setID(v.getID());
this.setName(v.getName());
this.setNum(v.getNum());

}

这样,您就可以编辑 View 的所有功能,而不会丢失任何信息。现在,这是一个非常通用的示例,请确保对其进行编辑,以便引入原始示例的所有功能。

关于java - 在类中设置 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26327956/

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