我正在通过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中吗?有更好的方法吗?
答案 0 :(得分:1)
您可以通过避免额外的活动来实现这一目标,即仅使用CrimeActivity , CrimeListFragment and CrimeFragment
首先在CrimeListFragment
内部将listview
装入CrimeActivity
。然后在列表视图上单击,在同一活动中加载第二个片段(通过使用回调,即片段交互侦听器)
通过这种方式,可以将两个片段本身加载到单个活动中