我的textview不符合我的要求。
从我的recyclerView适配器调用newInstance
时(按项目时),用户需要一个新的Activity来显示有关按下的项目的信息。
但是当我在newInstance
方法中使用我的文本视图时,没有显示演示文本“hello”,我得到NullPointerException
,但在onCreate中它可以工作。
我得到的错误是:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
com.example.muddii.traveldiary.TravelDiary.ShowNoteActivity.newInstance(ShowNoteActivity.java:54)
//Textview location works her and shows "helloooo" when it is in here
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_notepage);
getSupportActionBar().setTitle("Holiday at Red Sea");
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
location = (TextView)findViewById(R.id.showLocation);
location.setText("helloooo");
}
//Textview location dosn't work here
public static Intent newInstance(Context packageContext, long timestampID){
Intent intent = new Intent(packageContext, ShowNoteActivity.class);
Realm realm = Realm.getInstance(App.getAppContex());
TravelNote getRowItem = realm.where(TravelNote.class).equalTo("timestamp", timestampID).findFirst();
//getRowItem.getLocation().toString();
location.setText("helloooo");
return intent;
}
newInstance在此处从RecyclerView中调用我的viewHolder:
@Override
public void onClick(View v) {
Toast.makeText(App.getAppContex(), "" + getAdapterPosition(),Toast.LENGTH_SHORT).show();
ShowNoteActivity showNoteActivity = new ShowNoteActivity();
Intent intent = showNoteActivity.newInstance(App.getAppContex(),travelDiaries.get(getAdapterPosition()).getTimestamp());
context.startActivity(intent);
}
答案 0 :(得分:0)
您无法从静态参考中引用非静态字段。
答案 1 :(得分:0)
静态块首先执行,静态块中只能使用静态字段。
这里的位置没有得到任何引用,静态块尝试执行它。
答案 2 :(得分:0)
何时调用newInstance()
以及它如何知道您的布局文件是什么?
由于它是一种静态方法,因此它不了解您班级中的其他字段,主要是location
字段。
我假设您的课程正在通过newInstance()
方法初始化,该方法将在您的onCreate
方法之前调用,因此,您的布局尚未被夸大并设置为内容查看,因此位置文本字段尚不存在。
即使使用location
的静态实例,您仍然会得到一个空指针,因为您将拥有以下两个场景之一
确保在调用后只访问位置变量:
location = (TextView)findViewById(R.id.showLocation);