In below code, I try to display a basic dialog upon button click. The dialog shows some needs to show some text. I have got it working after i stumpled upon an error, but i still got a question to why that error occurs. In DialogFragmentSubclass.onCreateView() i get a reference to a TextView by calling findViewById(R.id.someIdValue). This gives me NullPointerException. However, getting the reference by calling:
View v = inflate.inflate(someREsourceValue, container, fals);
TextView tv = (TextView) v.findViewById(R.id.someValue);
seems to do the trick. Why does this work, and the other gives me a NullPointerException? (See below for full code)
public class MainActivity extends Activity {
DownloadImageDialogFragment myDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
// get reference to buttons
Button buttonDownloadImage = (Button) findViewById(R.id.downloadImage);
buttonDownloadImage.setText("Download new Image");
// upon button click, show a Dialog
buttonDownloadImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentTransaction ft = getFragmentManager().beginTransaction();
myDialog = new DownloadImageDialogFragment();
myDialog.show(ft, null);
}
});
}
private class DownloadImageDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_dialog, container, false);
// TextView tv = findViewById(R.id.dialogTextView); // this gives an error
TextView tv = (TextView) v.findViewById(R.id.dialogTextView); // this works
tv.setText("This is my dialog");
return v;
}
}
}
And here, the layout file for the dialog:
<TextView
android:id="@+id/dialogTextView"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</LinearLayout>