如何在内部静态类中使用意图开始活动



我有 static 内部 class> Activityclass中的class。我需要使用Intent(context,nameOfTheNewActivity.class)调用活动,因为当单击RecyclerView.ViewHolder的项目时,我正在尝试调用Intent。我必须覆盖onClick才能使用getLayoutPosition()(此getLayoutPosition()工作正常)单击该项目的位置。

现在,当我尝试使用意图时,我有错误:

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

我读了类似stackoverflow的另一个链接。在这种静态上下文和内部类中,我如何称呼意图静态类的课程?

我在此处询问之前尝试了以下内容:

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

  2. 'static;startActivity(意图)方法?

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

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项目上打开其他活动onclick

关于

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

您可能会在删除static的情况下更靠近解决方案。该应用实际构建。应用崩溃意味着您应该读取logcat并实现正确的解决方案。

当您使用 context.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文件中。

最新更新