如何从自定义视图(Java 类)正确启动 Activity?

mob*_*ici 5 java android android-custom-view android-intent android-activity

我正在尝试定义一个自定义 Java 类(扩展 a LinearLayout),它需要在单击时启动一个活动。我的代码如下所示:

public ArizaSatiri(Context context/*, AttributeSet attrs , final Activity aktivite*/ , JSONObject mysql_satiri)
    {
        super(context/*, attrs*/);

        // code to initialize my view :

        final Context finalContext = context;

        this.setOnClickListener(new OnClickListener() {@Override
            public void onClick(View v) {
                Intent newIntent = new Intent(finalContext, ArizaDetaylari.class);
                finalContext.startActivity(newIntent);
            }//onClick
        });


    }
Run Code Online (Sandbox Code Playgroud)

但是当我单击实例化视图时,出现错误:

Calling startActivity() from outside of an Activity  context requires the  
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Run Code Online (Sandbox Code Playgroud)

正如您从代码中看到的,我尝试将 传递Activity给构造函数,并且奏效了。但这是正确的方法吗?你会推荐哪种方式?

编辑:

而且我还需要setTypeFace()在某个时候打电话。我应该为此使用上下文还是活动?

Law*_*hoy 1

您可以将代码放入onAttachedToWindow()自定义视图类中。

@Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                final Context context = ArizaSatiri.this.getContext();
                Intent intent = new Intent(context , ArizaDetaylari.class);
                context.startActivity(intent);
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

这很有帮助,因为在将视图添加到活动后调用此函数,视图具有它的引用。视图的构造函数可能在添加到活动之前运行,因此会出现错误。

如果您在 xml 中声明视图而不是以编程方式创建视图,这也应该有效。(尚未测试)