我的Activityclass
中有一个静态和内部类。我需要使用Intent(context,nameOfTheNewActivity.class)
来调用活动,因为我在点击Intent
中的某个项目时尝试调用RecyclerView.ViewHolder
。我必须覆盖onClick
才能使用getLayoutPosition()
点击该项目的位置(此getLayoutPosition()工作正常)。
现在当我尝试使用Intent时出现错误:
静态上下文不能引用非静态方法。
我从Stackoverflow读取了另一个链接,如this。在这种静态上下文和内部类的情况下如何调用Intent,即如何在内部类中获取上下文,以及如何解决**基本**错误以不调用非静态静态类中的类?
我在尝试之前尝试了以下内容:
使用v.context从View中获取上下文,但我继续解决问题 - 仍然从静态上下文中调用非静态方法。
删除静态表单我的内部类,但没有解决,应用程序崩溃。
我的代码:
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//
}
});
}
}
答案 0 :(得分:3)
尝试使用Activity的引用。
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
关于
从我的内部类中删除static一词,但没有解决,应用程序崩溃
删除static
后,您可能更接近解决方案。该应用程序实际构建。应用程序崩溃意味着您应该阅读logcat并实施正确的解决方案。
答案 1 :(得分:1)
当您使用 context.startActivity(intent)时,您需要使用Context启动SecondActivity 你应该补充一下 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 在startActivity(intent)之前
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文件中。