从 Android 中的 fragmentActivity 返回片段
Back to a fragment from fragmentActivity in Android
我试图从 fragmentActivity 返回到片段,但它不起作用,我收到 NullPointerException,当我点击取消时,我需要更新前一个片段。我怎样才能回到片段并更新它?不知道为什么会这样。
public class AddEscolas extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addescola);
mSessao = new SecurePreferences(AddEscolas.this, "sessao");
pesquisa = (EditText) findViewById(R.id.campo_pesquisa);
nomeEscola = (TextView) findViewById(R.id.nomeEscola);
logradouro = (TextView) findViewById(R.id.endereco);
cidade = (TextView) findViewById(R.id.cidade);
procura = pesquisa.getText();
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(pesquisa.getWindowToken(), 0);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
findViewById(R.id.btnProcurar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Pesquisa().execute();
mFerramentas.hideKeyboard(AddEscolas.this, pesquisa);
}
});
findViewById(R.id.btnCancelar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
}
});
}
}
片段类:
public class EscolasFragment extends Fragment {
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_escolas, container, false);
ImageView add = (ImageView) rootView.findViewById(R.id.add);
mSessao = new SecurePreferences(getActivity(), "sessao");
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent addIntent = new Intent(getActivity(), AddEscolas.class);
startActivity(addIntent);
}
});
return rootView;
}
}
假设您只需要像这样调用 finish():
findViewById(R.id.btnCancelar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
NullPointerException 的原因可能是在 AddEscolas activity.
中找不到 R.id.content_frame 的布局 ID
如果在AddEscolasactivity退出后需要更新EscolasFragment片段,可以按照以下步骤进行:
- 使用 EscolarFragment 片段中的 startActivity() 来调用 AddEscolas activity。
- 在包含 EscolarFragment 片段的 activity 中使用 onActivityResult() 来提取 AddEscolas activity 返回的结果。
- 在 EscolarFragment 片段中使用 onResume() 来更新 UI。
只需在 FragmentActivity 中调用 onBackPressed();
。
你对FragmentActivity是什么概念有误。活动宿主片段。如果没有activity,你就不能去片段。阅读 docs
空指针异常来自
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
你需要给'fragment'实例。类似于:
Fragment fragment = new YourFragment();
我试图从 fragmentActivity 返回到片段,但它不起作用,我收到 NullPointerException,当我点击取消时,我需要更新前一个片段。我怎样才能回到片段并更新它?不知道为什么会这样。
public class AddEscolas extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addescola);
mSessao = new SecurePreferences(AddEscolas.this, "sessao");
pesquisa = (EditText) findViewById(R.id.campo_pesquisa);
nomeEscola = (TextView) findViewById(R.id.nomeEscola);
logradouro = (TextView) findViewById(R.id.endereco);
cidade = (TextView) findViewById(R.id.cidade);
procura = pesquisa.getText();
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(pesquisa.getWindowToken(), 0);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
findViewById(R.id.btnProcurar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Pesquisa().execute();
mFerramentas.hideKeyboard(AddEscolas.this, pesquisa);
}
});
findViewById(R.id.btnCancelar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
}
});
}
}
片段类:
public class EscolasFragment extends Fragment {
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_escolas, container, false);
ImageView add = (ImageView) rootView.findViewById(R.id.add);
mSessao = new SecurePreferences(getActivity(), "sessao");
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent addIntent = new Intent(getActivity(), AddEscolas.class);
startActivity(addIntent);
}
});
return rootView;
}
}
假设您只需要像这样调用 finish():
findViewById(R.id.btnCancelar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
NullPointerException 的原因可能是在 AddEscolas activity.
中找不到 R.id.content_frame 的布局 ID如果在AddEscolasactivity退出后需要更新EscolasFragment片段,可以按照以下步骤进行:
- 使用 EscolarFragment 片段中的 startActivity() 来调用 AddEscolas activity。
- 在包含 EscolarFragment 片段的 activity 中使用 onActivityResult() 来提取 AddEscolas activity 返回的结果。
- 在 EscolarFragment 片段中使用 onResume() 来更新 UI。
只需在 FragmentActivity 中调用 onBackPressed();
。
你对FragmentActivity是什么概念有误。活动宿主片段。如果没有activity,你就不能去片段。阅读 docs
空指针异常来自
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
你需要给'fragment'实例。类似于:
Fragment fragment = new YourFragment();