显示TextView时,对话框片段(自定义布局)不起作用

时间:2016-08-02 08:03:27

标签: android android-dialogfragment

我在这里阅读了一些帖子,但他们似乎无法解决我的问题。

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();

}

}

在添加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

4 个答案:

答案 0 :(得分: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 :(得分:1)

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />  

tv为null。也许你应该在布局dialog_layout中定义一个TextView标签。

TextView tv=(TextView)v.findViewById(R.id.textView);
tv.setText("my text here"); 

并使用此代码找到它。

答案 2 :(得分:1)

我认为错误就在这里:

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

替换      getActivity() 同     v(你正在膨胀的布局)

试试这个,

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

答案 3 :(得分:0)

你的对话框视图是dialog_layout,这意味着dialog_layout中有一个textview。我对吗?那你怎么没有从dialog_layout视图中获取textview?

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();