有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在内部静态类中使用意图启动活动?

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

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

Non-static method cannot be referenced by a static context.

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

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

  1. 使用v.context从视图中获取上下文,但我继续解决这个问题,并且仍然从静态上下文调用非静态方法

  2. "Static" startActivity(Intent) method?

  3. 从我的内部类中删除单词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//
            }
        });
    }
}

共 (2) 个答案

  1. # 1 楼答案

    使用上下文时,需要使用上下文启动SecondActivity。起始触觉(意图) 你应该加上 意图。添加标志(意图、标志、活动、新任务) 星前触觉(意图)

    主要活动。爪哇:

    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文件

  2. # 2 楼答案

    尝试使用活动的引用

    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);
                }
            });
    
        }
    

    参考How to open a different activity on recyclerView item onclick

    关于

    delete the word static from my inner class, but did not solve and the app crashes

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