[英]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,即如何在内部类内部获取上下文,以及如何解决**根本**错误以不调用非静态方法从静态类上学习?
在问这里之前,我尝试了以下方法:
使用v.context从视图中获取上下文,但我继续讨论该问题-仍然从静态上下文中调用非静态方法。
从内部类中删除“静态”一词,但没有解决,应用程序崩溃。
我的代码:
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);
}
});
}
关于
从我的内部类中删除“静态”一词,但没有解决,应用崩溃
通过消除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.