Java 如何修复调用虚拟方法的尝试';android.view.view androidx.fragment.app.FragmentActivity.findviewbyd(int)和#x27;在空对象引用上?
我想在拾取日期后在文本视图中设置日期,但它在我注释的行中抛出了一个错误,如何修复它 这里是CreateViewJava 如何修复调用虚拟方法的尝试';android.view.view androidx.fragment.app.FragmentActivity.findviewbyd(int)和#x27;在空对象引用上?,java,android,android-studio,android-fragments,Java,Android,Android Studio,Android Fragments,我想在拾取日期后在文本视图中设置日期,但它在我注释的行中抛出了一个错误,如何修复它 这里是CreateView public class MoonFragment extends Fragment { static { System.loadLibrary("native-lib"); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup
public class MoonFragment extends Fragment {
static {
System.loadLibrary("native-lib");
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_moon,
container, false);
final TextView moon_ra = (TextView) view.findViewById(R.id.moon_ra);
Button button = (Button) view.findViewById(R.id.moon_btn);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
moon_ra.setText(Double.toString(Aries(0.2)));
}
});
EditText moon_date = (EditText) view.findViewById(R.id.moon_date);
moon_date.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
DialogFragment newFragment = new SelectDateFragment(); // It throws error here
newFragment.show(getFragmentManager(), "DatePicker");
}
});
return view;
// return inflater.inflate(R.layout.activity_moon, container, false);
}
public native double Aries (double d);
在这里,我得到了选择日期的类,它在第二行中抛出错误
public static class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
TextView moon_ra = (TextView)getActivity(). findViewById(R.id.moon_ra); // and here
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int yy = calendar.get(Calendar.YEAR);
int mm = calendar.get(Calendar.MONTH);
int dd = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}
public void onDateSet(DatePicker view, int yy, int mm, int dd) {
populateSetDate(yy, mm+1, dd);
}
public void populateSetDate(int year, int month, int day) {
moon_ra.setText(month+"/"+day+"/"+year);
}
}
}
也许还有其他方法可以在textview中设置日期?显然,getActivity()在附加片段之前为空
您应该尝试将赋值代码放在#onCreateDialog()方法中:
您可以使用
onActivityResult()
将数据从SelectDateFragment
传递到MoonFragment
,如下所示
在MoonFragment
中调用SelectDateFragment
,如下所示
moon_date.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
DialogFragment newFragment = new SelectDateFragment();
newFragment.setTargetFragment(this, 111); // add this line
newFragment.show(getFragmentManager(), "DatePicker");
}
});
设置新日期时,将数据从SelectDateFragment
发送到MoonFragment
public void populateSetDate(int year, int month, int day) {
String newDate = month+"/"+day+"/"+year;
Intent intent = new Intent();
intent.putStringExtra("date", newDate);
getTargetFragment().onActivityResult(getTargetRequestCode(), 111, intent);
}
要接收数据,请在MoonFragment
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 111) {
String newDate = data.getStringExtra("date");
// here you can update your textview
moon_ra.setText(newDate); // make sure your moon_ra textview is decleared globally
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 111) {
String newDate = data.getStringExtra("date");
// here you can update your textview
moon_ra.setText(newDate); // make sure your moon_ra textview is decleared globally
}
}