Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在内部静态类中使用Intent启动活动?_Java_Android_Android Intent_Static - Fatal编程技术网

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

Java 如何在内部静态类中使用Intent启动活动?,java,android,android-intent,static,Java,Android,Android Intent,Static,在我的活动类中有一个静态和内部类。我需要使用Intent(context,nameofnewactivity.class)调用活动,因为我试图在单击RecyclerView.ViewHolder中的项目时调用Intent。我必须重写onClick以获取使用getLayoutPosition()单击的项目的位置(此getLayoutPosition()工作正常) 现在,当我尝试使用Intent时,出现了错误: 静态上下文无法引用非静态方法 我读了Stackoverflow的另一个链接。在这种情况下

在我的
活动类
中有一个静态内部类。我需要使用
Intent(context,nameofnewactivity.class)
调用活动,因为我试图在单击
RecyclerView.ViewHolder
中的项目时调用
Intent
。我必须重写
onClick
以获取使用
getLayoutPosition()
单击的项目的位置(此getLayoutPosition()工作正常)

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

静态上下文无法引用非静态方法

我读了Stackoverflow的另一个链接。在这种情况下,如何在静态上下文和内部类中调用Intent,即如何在内部类中获取上下文,以及如何解决**基本**错误以不从静态类调用非静态类

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

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//
            }
        });
    }
}
  • 使用v.context从视图中获取上下文,但我继续解决这个问题,并且仍然从静态上下文调用非静态方法

  • 从我的内部类中删除单词static,但没有解决问题,应用程序崩溃

  • 我的代码:

    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
    是任何上下文的一种方法

    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);
                }
            });
    
        }
    
    参考文献

    关于

    从我的内部类中删除单词static,但没有解决问题,应用程序崩溃


    通过删除
    static
    ,您可能更接近解决方案。这个应用程序实际上是构建的。应用程序崩溃意味着您应该阅读日志并实施正确的解决方案

    尝试使用活动的引用

    ActivityOne.this.startActivity(intent);
    
    如果这不起作用,那么要知道
    startActivity
    是任何上下文的一种方法

    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);
                }
            });
    
        }
    
    参考文献

    关于

    从我的内部类中删除单词static,但没有解决问题,应用程序崩溃


    通过删除
    static
    ,您可能更接近解决方案。这个应用程序实际上是构建的。应用程序崩溃意味着您应该阅读日志并实施正确的解决方案

    在使用Context.startActivity(intent)时,您需要使用上下文来启动SecondActivity 你应该加上 intent.addFlags(intent.FLAG\u活动\u新任务) 星前触觉(意图)

    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);
        }
    
    }
    }
    
    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);
    }
    }
    
    SecondActivity.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);
        }
    
    }
    }
    
    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文件中。

    使用Context.startActivity(intent)时,需要使用上下文来启动SecondActivity 你应该加上 intent.addFlags(intent.FLAG\u活动\u新任务) 星前触觉(意图)

    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);
        }
    
    }
    }
    
    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);
    }
    }
    
    SecondActivity.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);
        }
    
    }
    }
    
    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文件中。

    ActivityOne。只有当
    MessageViewHolderOfFriend
    类不是静态的时,这个
    才会起作用。这就是为什么我接着说“如果不起作用”。ViewHolder类应该是静态的吗?cricket_007的第二个解决方案成功了!1:在静态内部类中:创建私有的最终上下文;2.在静态内部类的构造函数中,在调用super(v)之后,获取上下文:contex=v.getContext();3.在v.setOnClickListener(…){Intent Intent Intent=newintent(context,NewActivityToRun.class);//打开
    ActivityOne。只有当
    MessageViewHolderOfFriend
    类不是静态的时,这个
    才会起作用。这就是为什么我接着说“如果不起作用”。ViewHolder类无论如何都应该是静态的吗?cricket_007的第二个解决方案奏效了!1.在静态内部类中:创建一个私有的最终上下文上下文;2.在静态内部类的构造函数中,在调用super(v)后,获取上下文:contex=v.getContext();3.在v.setOnClickListener(…){Intent Intent=newintent(上下文,NewActivityToRun.class);//若要打开检查此示例,它肯定会帮助将上下文传递给适配器。1.您应该保持内部类的静态,这是防止内存泄漏的好方法。检查此示例,它肯定会帮助将上下文传递给适配器。1.您应该保持内部类的静态,这是防止内存泄漏的好方法。