TextView不能在自定义方法中工作,但只能在onCreate()中工作;

时间:2016-04-18 19:19:32

标签: android

我的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);


    }

3 个答案:

答案 0 :(得分:0)

您无法从静态参考中引用非静态字段。

答案 1 :(得分:0)

静态块首先执行,静态块中只能使用静态字段。

这里的位置没有得到任何引用,静态块尝试执行它。

答案 2 :(得分:0)

何时调用newInstance()以及它如何知道您的布局文件是什么?

由于它是一种静态方法,因此它不了解您班级中的其他字段,主要是location字段。

我假设您的课程正在通过newInstance()方法初始化,该方法将在您的onCreate方法之前调用,因此,您的布局尚未被夸大并设置为内容查看,因此位置文本字段尚不存在。

即使使用location的静态实例,您仍然会得到一个空指针,因为您将拥有以下两个场景之一

  1. 您将不会加载您的布局文件(即setContentView)
  2. 您之前已加载了内容视图,因此您的静态变量现在将指向已回收的视图中的textview。
  3. 确保在调用后只访问位置变量:

    location = (TextView)findViewById(R.id.showLocation);