【发布时间】:2021-12-01 09:58:56
【问题描述】:
下面是我的应用程序的一些代码。我需要帮助的部分在 SettingFragment.java 中的requireActivity():
MainActivity.java
...
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
}
public void iniciarIntent3() { //this method is called by a button in activity_main.xml
Intent intent = new Intent(this, Settings.class);
startActivityForResult(intent, 1);
}
}
Settings.java
...
public class Settings extends AppCompatActivity implements SettingsFragment.SendToActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
}
}
@Override
public void onAttachFragment(Fragment fragment) {
if (fragment instanceof SettingsFragment) {
SettingsFragment settingsFragment = (SettingsFragment) fragment;
settingsFragment.setSendToActivity(this);
}
}
public void send(int result) {
...
}
}
SettingsFragment.java
public class SettingsFragment extends PreferenceFragmentCompat {
SendToActivity callback;
public void setSendToActivity (SendToActivity callback) {
this.callback = callback;
}
public interface SendToActivity {
void send(int result);
}
if (editTextPreference != null) {
editTextPreference.setOnBindEditTextListener(new
EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
editText.setText("");
editText.setBackground(ContextCompat.getDrawable(requireActivity()
.getApplicationContext(), R.drawable.fondo_edittextpreference));
}
});
}
...
}
我只是想确保 SettingsFragment 类中的 requireActivity() 不会抛出空指针异常。你能帮我检查一下吗?
【问题讨论】:
-
这完全取决于您执行
requireActivity()调用时片段的状态以及当时它是否附加到活动。您可以通过使用setBackgroundResource()或从EditText获取Context来消除requireActivity()调用。 -
@CommonsWare 对,我将使用
setBackgroundResource()。谢谢。
标签: java android android-activity fragment