在片段之间发送结果的最佳方法?

时间:2018-06-22 08:09:37

标签: java android

我正在通过Android Programming: The Big Nerd Ranch Guide (3rd Edition)中的练习进行练习,不确定我的实现是否良好。

我有两个片段,CrimeListActivity和CrimeActivity,分别托管CrimeListFragment和CrimeFragment。 CrimeFragment包含犯罪列表,当用户单击列表中的某个项目时,它将打开CrimeActivity(包含CrimeFragment。)

这是ViewHodler中的代码,我在其中打开了一个新的CrimeActivity

@Override
public void onClick(View view) {
    Intent intent = CrimeActivity.newIntent(getActivity(), mCrime.getId());
    startActivityForResult(intent, REQUEST_CRIME_CODE);
    mListener.changed(mCrime);
}

在CrimeFragment内部,我设置了如下的点击监听器。

mDateButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.putExtra(REQUEST_CRIME, mCrime.getId());
        getActivity().setResult(REQUEST_CRIME_CODE, intent);
    }
});

我在CrimeListFragment中重写了onActivityResult,以便在发生更改时得到通知。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CRIME_CODE) {
        UUID crimeId = (UUID) data.getSerializableExtra(REQUEST_CRIME);
        int position = -1;

        for (Crime crime : mCrimes) {
            position++;
            if (crimeId.equals(crime.getId())) {
                mAdapter.notifyItemChanged(position);
            }
        }
    }
}

我不确定这是否是在Fragment之间发送数据的正确方法,因为我有Adapter和ViewHolder。我应该把逻辑放到ViewHolder中吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以通过避免额外的活动来实现这一目标,即仅使用CrimeActivity , CrimeListFragment and CrimeFragment

首先在CrimeListFragment内部将listview装入CrimeActivity。然后在列表视图上单击,在同一活动中加载第二个片段(通过使用回调,即片段交互侦听器)

通过这种方式,可以将两个片段本身加载到单个活动中