2016-08-02 97 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