我在这里阅读了一些帖子,但他们似乎无法解决我的问题。
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
答案 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();