我有 static 和内部 class> Activityclass
中的class。我需要使用Intent(context,nameOfTheNewActivity.class)
调用活动,因为当单击RecyclerView.ViewHolder
的项目时,我正在尝试调用Intent
。我必须覆盖onClick
才能使用getLayoutPosition()
(此getLayoutPosition()工作正常)单击该项目的位置。
现在,当我尝试使用意图时,我有错误:
非静态方法不能用静态上下文引用。
我读了类似stackoverflow的另一个链接。在这种静态上下文和内部类中,我如何称呼意图静态类的课程?
我在此处询问之前尝试了以下内容:
-
使用v.context从视图获取上下文,但我继续存在问题 - 并且仍然从静态上下文中调用非静态方法。
-
'static;startActivity(意图)方法?
-
删除单词静态的形式我的内部类,但没有解决并且应用程序崩溃。
我的代码:
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文件中。