在类中设置“this”

Posted

技术标签:

【中文标题】在类中设置“this”【英文标题】:Set "this" in a class 【发布时间】:2014-10-12 17:30:10 【问题描述】:

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

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

public class MyView extends View

    public MyView(Activity activity)
    
        activity.setContentView(R.layout.my_view);
    

现在,问题是当 ControllerFragment 时,因为我不能使用 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,那么你还没有准备好构建应用程序。 【参考方案1】:

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

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

public void transferInfo(View v)


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


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

【讨论】:

您的意思是“属性”,而不是“实例”;从上下文来看,意思很清楚,但由于“实例”在 OOP 中意味着非常具体的东西,所以您可能希望避免误用它。 这里的问题是您必须确切地知道要保留哪些属性。我只想将View v 设置为MyView 类的根视图。

以上是关于在类中设置“this”的主要内容,如果未能解决你的问题,请参考以下文章

在类中设置默认值

在类构造函数中设置 std::vector

如何从视图控制器的 uitextfield 在类中设置 NSString

如何在类外设置结构值?

如何在类定义中设置属性

在 QTextEdit 中设置行距