2016-08-02 44 views
0

我已經閱讀了一些帖子,但他們似乎沒有解決我的問題。顯示TextView時Dialog Fragment(自定義佈局)不起作用

enter image description here

MainActivity.java

public class MainActivity extends AppCompatActivity { 

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

    Button button=(Button)findViewById(R.id.button2); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      dialog my_alert=new dialog(); 
      my_alert.show(getFragmentManager(),""); 
     } 
    }); 

} 
} 

dialog.java

public class dialog extends DialogFragment { 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder build=new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater; 
    View v; 
    inflater=getActivity().getLayoutInflater(); 
    v=inflater.inflate(R.layout.dialog_layout,null); 
    build.setView(v); 
    return build.create(); 

} 

}

上述編碼是WO在添加textview之前進行編輯。

但是,我想要做的是在自定義佈局中顯示textview。如果我在build.setView(v)下面添加以下編碼,它將退出。

build.setView(v) 
TextView tv=(TextView)getActivity().findViewById(R.id.textView); 
tv.setText("my text here"); 
return build.create(); 

logcat的錯誤

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
+0

AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this);不要從DialogFragment擴展並將構建器用於您的活動。如果不擴展,可以使用builder.setView()來使用自定義視圖 – Bob

+0

,這意味着我必須放入主要活動?我想分開java類。併爲您的解決方案,你能解釋更多? – gosulove

+0

檢查您的dialog_layout.xml是否具有ID爲「textView」的TextView – sJy

回答

1

onCreateDialog()

View v; 
inflater=getActivity().getLayoutInflater(); 
v=inflater.inflate(R.layout.dialog_layout,null); 
TextView tv=(TextView)v.findViewById(R.id.textView); 
tv.setText("my text here");** 
1
<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

電視是null.Maybe你應該定義在佈局dialog_layout一個TextView標籤執行此操作。

並使用此代碼找到它。

1

我認爲錯誤是在這裏:

TextView tv=(TextView)getActivity().findViewById(R.id.textView); 

更換 getActivity() 與 V(你正在膨脹的佈局)

試試這個,

TextView tv=(TextView)v.findViewById(R.id.textView); 
0

你的對話視圖是dialog_layout,這意味着在dialog_layout中有一個textview。我對嗎?那麼下面你怎麼沒有從dialog_layout視圖中獲取文本視圖?

build.setView(v) 
TextView tv=(TextView)getActivity().findViewById(R.id.textView); //--> which view is the textview from? 
tv.setText("my text here"); 
return build.create(); 
+0

是的,我從那裏得到。問題是從getActivity()更改爲v,然後解決! – gosulove