繁体   English   中英

如何在内部静态类中使用Intent启动活动?

[英]How start an activity using Intent inside a inner static class?

我的Activityclass有一个静态的 内部类。 我需要使用Intent(context,nameOfTheNewActivity.class)调用Activity Intent(context,nameOfTheNewActivity.class)因为单击来自RecyclerView.ViewHolder的项时,我试图调用Intent 我必须重写onClick以获得使用getLayoutPosition()单击该项目的位置(此getLayoutPosition()正常工作)。

现在,当我尝试使用Intent时出现错误:

静态上下文不能引用非静态方法。

我读了像#2链接的另一 在静态上下文和内部类内部的情况下,如何调用Intent,即如何在内部类内部获取上下文,以及如何解决**根本**错误以不调用非静态方法从静态类上学习?

在问这里之前,我尝试了以下方法:

  1. 使用v.context从视图中获取上下文,但我继续讨论该问题-仍然从静态上下文中调用非静态方法。

  2. “静态” startActivity(Intent)方法?

  3. 从内部类中删除“静态”一词,但没有解决,应用程序崩溃。

我的代码:

public class ActivityOne extends AppCompatActivity implements
GoogleApiClient.OnConnectionFailedListener {

    public static class MessageViewHolderOfFriend extends RecyclerView.ViewHolder {   public  MessageViewHolderOfFriend(View v) {
        super(v);
        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ;

                Intent intent = new Intent(v.getContext(),NewActivityToRun.class);
                startActivity(intent);//Error in this Line//
            }
        });
    }
}

尝试使用活动的引用。

ActivityOne.this.startActivity(intent);

如果这不起作用,请知道startActivity是任何Context的方法。

class MessageViewHolderOfFriend extends RecyclerView.ViewHolder {

    private final Context context;

    public  MessageViewHolderOfFriend(View v) {
        super(v);
        context = v.getContext();

        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context,NewActivityToRun.class);
                context.startActivity(intent);
            }
        });

    }

参考。 如何在recyclerView上打开其他活动

关于

从我的内部类中删除“静态”一词,但没有解决,应用崩溃

通过消除static您可能更接近解决方案。 该应用程序实际上已构建。 应用程序崩溃意味着您应该阅读logcat并实施适当的解决方案。

当您使用context.startActivity(intent)时,需要使用Context来启动SecondActivity,并且应该在startActivity(intent)之前添加intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK

MainActivity.java:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // method 1:
            MyInnerClass innerClass = new MyInnerClass();
            innerClass.firstLauncher(MainActivity.this);

           // method 2:
           // MyInnerClass.secondLauncher(MainActivity.this);
        }
    });
}


static class MyInnerClass {

    /**
     * member method
     */
    private void firstLauncher(Context context) {
        Intent intent = new Intent(context, SecondActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("flag_activity", "I'm 1th");
        context.startActivity(intent);
    }

    /**
     * static method
     */
    private static void secondLauncher(Context context) {
        Intent intent = new Intent(context, SecondActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("flag_activity", "I'm 2th");
        context.startActivity(intent);
    }

}
}

SecondActivity.java:

public class SecondActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_main);

    TextView textView = (TextView) findViewById(R.id.tv_msg);

    String msg = getIntent().getStringExtra("flag_activity");
    textView.setText(msg);
}
}

所有实现都在ContextImpl.java文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM