Android fragments 如何在嵌套片段中的backpressed上更新listview?
这是我的片段,我有一个列表视图,我正在用ChapterListAdapter填充它 课程片段Android fragments 如何在嵌套片段中的backpressed上更新listview?,android-fragments,Android Fragments,这是我的片段,我有一个列表视图,我正在用ChapterListAdapter填充它 课程片段 public class CurriculumFragment extends Fragment implements ResponseDelegate { Context contextd; ListView curriculumList; FragmentActivity mActivity; boolean onResult
public class CurriculumFragment extends Fragment implements
ResponseDelegate {
Context contextd;
ListView curriculumList;
FragmentActivity mActivity;
boolean onResult=false;
int requestCode, resultCode;
Intent data;
String courseId;
private RequestedServiceDataModel requestedServiceDataModel;
private ArrayList<ChapterItem> courses = new ArrayList<>();
private ChaptersListAdapter adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
contextd = container.getContext();
View rootView = inflater.inflate(R.layout.fragment_circulam, container, false);
courseId = getArguments().getString("course_id","2");
curriculumList = (ListView) rootView.findViewById(R.id.circulamList);
adapter = new ChaptersListAdapter((AppCompatActivity) getActivity(), courses);
curriculumList.setAdapter(adapter);
serverRequestForCompleteModule(); // This function fill arraylist courses with data.
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = (FragmentActivity) activity;
}
@Override
public void onDetach() {
super.onDetach();
contextd = null;
mActivity = null;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent
data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == getActivity().RESULT_OK && requestCode == 1111)
{
courses.clear();
courses = (ArrayList<ChapterItem>) data.getSerializableExtra("list");
adapter = new ChaptersListAdapter((AppCompatActivity)mActivity,
courses);
curriculumList.setAdapter(adapter);
}
}
公共类课程片段扩展片段实现
响应特使{
语境语境;
ListView课程列表;
碎片活性;
布尔onResult=false;
int requestCode,resultCode;
意向数据;
字符串courseId;
私有RequestedServiceDataModel RequestedServiceDataModel;
私有ArrayList课程=新建ArrayList();
专用章静态适配器;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
contextd=container.getContext();
视图根视图=充气机。充气(R.layout.fragment\u circulam,container,false);
courseId=getArguments().getString(“课程id”,“2”);
课程列表=(ListView)rootView.findViewById(R.id.circulamList);
adapter=新章节slistadapter((AppCompatActivity)getActivity(),课程);
设置适配器(适配器);
serverRequestForCompleteModule();//此函数使用数据填充arraylist课程。
返回rootView;
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
mActivity=(碎片活动)活动;
}
@凌驾
公共无效连接(){
super.onDetach();
contextd=null;
mActivity=null;
}
@凌驾
activityResult上的公共void(int请求代码、int结果代码、意图
(数据){
super.onActivityResult(请求代码、结果代码、数据);
如果(resultCode==getActivity().RESULT_OK&&requestCode==1111)
{
课程。清晰();
courses=(ArrayList)data.getSerializableExtra(“列表”);
adapter=新章节SlistAdapter((AppCompatActivity)MacActivity,
课程);
设置适配器(适配器);
}
}
我正在像这样打开Activity MediaPlayerActivity 3
章节列表适配器
void dialogMediaPlayer(final ArrayList<ChapterItem.Module> mlist, final int position, String title, String imageUrl,String chapname,boolean audioStream) {
Intent mint = new Intent(contextd, MediaPlayerActivity3.class);
Bundle bundle = new Bundle();
bundle.putSerializable("courselist",list);
bundle.putSerializable("list",mlist);
bundle.putInt("gpos",glPos);
bundle.putInt("pos",position);
bundle.putString("title",title);
bundle.putString("image",imageUrl);
bundle.putString("chapter",chapname);
bundle.putBoolean("stream",audioStream);
mint.putExtras(bundle);
contextd.startActivityForResult(mint,1111);
contextd.overridePendingTransition( R.anim.slide_up, R.anim.slide_down );
}
void dialogMediaPlayer(最终数组列表mlist,最终int位置,字符串标题,字符串imageUrl,字符串chapname,布尔音频流){
Intent mint=新Intent(contextd,MediaPlayerActivity3.class);
Bundle=新Bundle();
bundle.putSerializable(“课程列表”,列表);
bundle.putSerializable(“list”,mlist);
bundle.putInt(“GPO”,glPos);
bundle.putInt(“位置”,位置);
bundle.putString(“title”,title);
bundle.putString(“image”,imageUrl);
bundle.putString(“章”,章名);
bundle.putBoolean(“流”,audioStream);
薄荷糖(束);
背景:startActivityForResult(造币厂,1111年);
上下文。覆盖转换(R.anim.slide\u向上,R.anim.slide\u向下);
}
现在我在Activity中完成我的工作,现在当我按下backpress键时,我想更新课程片段中的listView,这是通过OnActivityResult方法完成的,但在OnActivityResult方法中getActivity()始终返回null
活动中的OnBackpressed方法如下
MediaPlayerActivity 3
public class MediaPlayerActivity3 extends AppCompatActivity implements ResponseDelegate {
@Override
public void onBackPressed() {
saveInsatance(tmpModule.get(position).getModule_id());
stop = false;
myHandler.removeCallbacks(UpdateSongTime);
int x1=0;
if(tmpModule.get(posit).getIs_module_comeplete().equals("0")){
x1=(int)(TimeUnit.MILLISECONDS.toSeconds((long)finalTime)-TimeUnit.MILLISECONDS.toSeconds((long)startTime));
if(x1<5){
serverRequestQuizForAudeoComplite(tmpModule.get(posit).getModule_id());
tmpModule.get(posit).setIs_module_comeplete("1");
}
}
courses.get(glpos).setModule_files(tmpModule);
Intent returnIntent = new Intent();
Bundle bundle = new Bundle();
bundle.putSerializable("list",courses);
bundle.putString("complete",completed);
returnIntent.putExtras(bundle);
setResult(Activity.RESULT_OK,returnIntent);
super.onBackPressed();
}
}
公共类MediaPlayerActivity 3扩展AppCompativeActivity实现ResponseDelegate{
@凌驾
public void onBackPressed(){
saveInStatance(tmpModule.get(position.getModule_id());
停止=错误;
myHandler.removeCallbacks(UpdateSongTime);
int-x1=0;
if(tmpModule.get(posit.getIs_module_comeplete().equals(“0”)){
x1=(int)(TimeUnit.millizes.toSeconds((long)finalTime)-TimeUnit.millizes.toSeconds((long)startTime));
如果(x1),请提供一个。请查看共享代码的指南。这是否足够?