2016-12-05 104 views
0

创建对话框我收到此错误java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object referenceERROR在Android Studio中

我尝试设置文本后,但没有运气改变的setContentView。 即使认为我搜索了,我也找不到我做错了什么。

这是我的对话框创建。当我从textview设置文本时出现错误。

public void forgetDialog() { 
     final Dialog dialog = new Dialog(this); // Context, this, etc. 

     dialog.setTitle(R.string.dialog_title2); 

     // dialog.setOnDismissListener(dialog.dismiss();); 
     dialog.setContentView(R.layout.dialog); 
     TextView txv = (TextView)findViewById(R.id.dialog_info); 
     txv.setText(""); 
     txv.setText("You forgot to add the ingredients!"); 

     dialog.show(); 
     btn_dialog = (Button) dialog.findViewById(R.id.dialog_ok) ; 
     btn_dialog.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       dialog.cancel(); 
      } 
     }); 
    } 

这里是我使用

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/dialog_info" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:text="@string/dialog_text"/> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:layout_below="@id/dialog_info"> 



     <Button 
      android:id="@+id/dialog_ok" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.50" 
      android:background="@color/dialog_ok_bgcolor" 
      android:text="Ok, got it"/> 
    </LinearLayout> 
</RelativeLayout> 

回答

2

第一步
写两个单独的XML文件的,一个是活动的布局XML(activity.xml),一个用于对话框的布局(dialog.xml)。确保您的dialog.xml包含您需要的TextView和Button。

第二步
,我把在下一步的代码之前声明
Button btn_dialog; TextView txv;

第三步
试试这个代码,我试过了,它工作。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 
    forgetDialog(); 
} 

public void forgetDialog() { 
    final Dialog dialog = new Dialog(this); // Context, this, etc. 
    dialog.setTitle("Title"); 

    // dialog.setOnDismissListener(dialog.dismiss();); 
    dialog.setContentView(R.layout.dialog); 
    txv = (TextView) dialog.findViewById(R.id.dialog_info); 
    txv.setText(""); 
    txv.setText("You forgot to add the ingredients!"); 

    dialog.show(); 

    btn_dialog = (Button) dialog.findViewById(R.id.dialog_ok); 
    btn_dialog.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      dialog.cancel(); 
     } 
    }); 
} 

我认为错误是:
1)布局的管理;
2)你忘记告诉你想在哪个视图中找到TextView的id。

+0

Yeap它是数字2.我把对话框在findViewById前,它的工作!谢谢! – Newera