我有一个带有显示一些CardView的RecyclerView的片段(FragmentA)。我想让cardviews可点击,所以我找到的解决方案是在适配器类内部的ViewHolder中实现View.OnClickListener。像这样的东西:
fragmentAAdapter.java
public class fragmentAViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public fragmentAViewHolder (View itemView) {
super(itemView);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//do something..
}
}
的的onClick()方法从点击的cardview获取数据,并开始谁显示数据的活动(InfoActivity)。
OnClick()方法
@Override
public void onClick(View v) {
Intent intent = new Intent(itemView.getContext(), InfoActivity.class);
Bundle mBundle = new Bundle();
mBundle.putParcelable("someData", someData);
intent.putExtras(mBundle);
itemView.getContext().startActivity(intent);
}
在InfoActivity中,我可以更新和删除数据。之后,我想完成InfoActivity并刷新FragmentA以获取新数据。
要关闭活动并刷新上一个片段,我尝试使用startActivityForResult()。像这样:
@Override
public void onClick(View v) {
Intent intent = new Intent(itemView.getContext(), InfoActivity.class);
((Activity) itemView.getContext()).startActivityForResult(intent, 10001);
}
InfoActivity.java
@Override
public void onClick(DialogInterface dialog, int which) {
setResult(InfoActivity.RESULT_OK);
finish();
}
FragmentA.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == 10001) && (resultCode == InfoActivity.RESULT_OK)) {
FragmentAfragment = new FragmentA();
android.support.v4.app.FragmentTransaction fragmentTransaction =
getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
}
但是,当我关闭InfoActivity时,什么也没发生。
问题在于setResult(InfoActivity.RESULT_OK)将结果返回给适配器类(fragmentAAdapter),而不是返回给FragmentA,因此从不调用FragmentA中的onActivityResult()方法。
关闭在FragmentAAdapter的onClick()方法内启动的InfoActivity之后,如何刷新FragmentA?
我在FragmentA的活动中重写了onActivityResult()方法。像这样:
MainActivity.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == 10001) && (resultCode == 10001)) {
FragmentA fragment = new FragmentA();
android.support.v4.app.FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
}
并在InfoActivity.java中:
@Override
public void onClick(DialogInterface dialog, int which) {
setResult(10001);
finish();
}
每次关闭活动并返回FragmentA时,都会调用MainActivity中的onActivityResult(),并且当条件if((requestCode == 10001)&&(resultCode == 10001))为true时,将刷新FragmentA。
在片段的活动中,您可以执行以下操作:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
requestCode &= 0xffff;
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
if (fragment != null) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
或者您可以使用事件总线,例如:http : //square.github.io/otto/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句