【问题标题】:Back to a fragment from fragmentActivity in Android从 Android 中的 fragmentActivity 返回一个片段
【发布时间】:2015-06-01 14:01:56
【问题描述】:

我正在尝试从 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;
    }
}

【问题讨论】:

  • 你在做什么毫无意义......你应该阅读有关片段的 Android 文档
  • 能否提供空指针异常的stacktrace
  • 您是否尝试从片段内部启动 Activity。这很令人困惑,因为片段是活动的一部分,它如何启动它。片段可以使用回调与活动对话。

标签: android android-intent android-fragments android-fragmentactivity


【解决方案1】:

假设你只需要调用finish(),像这样:

  findViewById(R.id.btnCancelar).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                finish();
            }
        });

出现 NullPointerException 的原因可能是在 AddEscolas 活动中找不到 R.id.content_frame 的布局 id。

如果您需要在 AddEscolas 活动退出后更新 EscolasFragment 片段,您可以按照以下步骤操作:

  1. 使用 EscolarFragment 片段中的 startActivity() 调用 AddEscolas 活动。
  2. 在包含 EscolarFragment 片段的活动中使用 onActivityResult() 来提取 AddEscolas 活动返回的结果。
  3. 在 EscolarFragment 片段中使用 onResume() 来更新 UI。

【讨论】:

  • 我不能简单地调用finish,当我回到它时我需要更新EscolaFragment
【解决方案2】:

您对 FragmentActivity 的概念有误。活动宿主片段。你不能在没有活动的情况下进入片段。阅读docs

空指针异常来自

fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

您需要为“片段”提供实例。有点像:

Fragment fragment = new YourFragment();

【讨论】:

    【解决方案3】:

    只需在 FragmentActivity 中调用onBackPressed();。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2017-12-22
      • 2014-10-10
      相关资源
      最近更新 更多