如何在片段中的一个选项卡与另一个选项卡之间切换时动态刷新选项卡内容?

2024-05-17

我有一个名为 CourseActivity.java 的活动,因为我有 2 个名为 UserCourses 和 FavouriteCourses 的选项卡。我在第一个选项卡中有一些课程列表。它有图标,在选择图标时,相应的粗略内容将添加到 Favouritecourse 列表中。但是我的问题是当我进入“收藏夹课程”选项卡时,内容不会更新,直到我刷新它或注销并再次登录应用程序。

这是 CoarseActivity.java。这会将课程类型发送到 CourseFragment.java

//display content of tabs on touch of tabs
class CourseTabsAdapter extends FragmentStatePagerAdapter {


    public CourseTabsAdapter(FragmentManager fm)
    {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        /*
         * We use bundle to pass course listing type because, by using other
         * methods we will lose the listing type information in the fragment
         * on onResume (this calls empty constructor). For the same reason
         * interface may not work. Bundles are passed again on onResume
         */
        switch (position) {
        case 0:

            /*LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(CourseActivity.this);
            Intent i = new Intent("TAG_REFRESH");
            lbm.sendBroadcast(i);*/

            CourseFragment userCourses = new CourseFragment();

            // Set the listing type to only user courses in bundle.
            Bundle bundle = new Bundle();
            bundle.putInt("coursesType", CourseFragment.TYPE_USER_COURSES);
            userCourses.setArguments(bundle);

            return userCourses;
        case 1:
            CourseFragment favCourses = new CourseFragment();

            /*favCourses.onRefresh();*/

            /*new courseSyncerBg().execute("");*/
            // Set the listing type to only user courses in bundle.
            Bundle bundle1 = new Bundle();
            bundle1.putInt("coursesType", CourseFragment.TYPE_FAV_COURSES);
            favCourses.setArguments(bundle1);

            return favCourses;
        }
        return null;
    }

这是我的 CourseFragment.java

public class CourseFragment extends Fragment implements OnRefreshListener {
/**
 * List all courses in Moodle site
 */
public static final int TYPE_ALL_COURSES = 0;
/**
 * List only user courses
 */
public static final int TYPE_USER_COURSES = 1;
/**
 * List only courses favourited by user
 */
public static final int TYPE_FAV_COURSES = 2;

CourseListAdapter courseListAdapter;
SessionSetting session;
List<MoodleCourse> mCourses;
int Type = 0;
LinearLayout courseEmptyLayout;
SwipeRefreshLayout swipeLayout;

/**
 * Pass the course listing type as a bundle param of type int with name
 * coursesType
 */
public CourseFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (this.getArguments() != null)
        Type = this.getArguments().getInt("coursesType", TYPE_USER_COURSES);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.frag_courses, container,
            false);

    // Get all courses of this site
    session = new SessionSetting(getActivity());

    if (Type == TYPE_USER_COURSES)
        mCourses = MoodleCourse.find(MoodleCourse.class,
                "siteid = ? and is_user_course = ?",
                session.getCurrentSiteId() + "", "1");
    else if (Type == TYPE_FAV_COURSES)
        mCourses = MoodleCourse.find(MoodleCourse.class,
                "siteid = ? and is_fav_course = ?",
                session.getCurrentSiteId() + "", "1");
    else
        mCourses = MoodleCourse.find(MoodleCourse.class, "siteid = ?",
                session.getCurrentSiteId() + "");

    courseEmptyLayout = (LinearLayout) rootView
            .findViewById(R.id.course_empty_layout);
    ListView courseList = (ListView) rootView
            .findViewById(R.id.content_course);
    courseListAdapter = new CourseListAdapter(getActivity());
    courseList.setAdapter(courseListAdapter);

    swipeLayout = (SwipeRefreshLayout) rootView
            .findViewById(R.id.swipe_refresh);
    Workaround.linkSwipeRefreshAndListView(swipeLayout, courseList);
    swipeLayout.setOnRefreshListener(this);

    // We don't want to run sync in each course listing
    if (Type == TYPE_USER_COURSES)
        new courseSyncerBg().execute("");

    return rootView;
}

public class CourseListAdapter extends BaseAdapter {
    private final Context context;

    public CourseListAdapter(Context context) {
        this.context = context;
        if (!mCourses.isEmpty())
            courseEmptyLayout.setVisibility(LinearLayout.GONE);
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {
        final ViewHolder viewHolder;

        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = inflater.inflate(R.layout.list_item_course,
                    parent, false);

            viewHolder.shortname = (TextView) convertView
                    .findViewById(R.id.list_course_shortname);
            viewHolder.fullname = (TextView) convertView
                    .findViewById(R.id.list_course_fullname);
            viewHolder.favIcon = (ImageView) convertView
                    .findViewById(R.id.list_course_fav);

            // Save the holder with the view
            convertView.setTag(viewHolder);
        } else {
            // Just use the viewHolder and avoid findviewbyid()
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // Assign values
        final MoodleCourse mCourse = mCourses.get(position);
        viewHolder.shortname.setText(mCourse.getShortname());
        viewHolder.fullname.setText(mCourse.getFullname());
        if (mCourses.get(position).getIsFavCourse())
            viewHolder.favIcon.setImageResource(R.drawable.icon_favorite);
        else
            viewHolder.favIcon
                    .setImageResource(R.drawable.icon_favorite_outline);

        convertView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Intent i = new Intent(context, CourseContentActivity.class);
                i.putExtra("courseid", mCourses.get(position).getCourseid());
                context.startActivity(i);
            }
        });

        viewHolder.favIcon.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {

                // Simply unfav if that's the case
                if (mCourse.getIsFavCourse()) {
                    mCourse.setIsFavCourse(!mCourse.getIsFavCourse());
                    mCourse.save();

                    // Update listview
                    mCourses.get(position).setIsFavCourse(
                            mCourse.getIsFavCourse());
                    courseListAdapter.notifyDataSetChanged();

                    // Update listview
                    mCourses.get(position).setIsFavCourse(
                            mCourse.getIsFavCourse());
                    courseListAdapter.notifyDataSetChanged();

                    return;
                }

                // If fav'ing, ask for confirmation. We will be doing a sync
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                        context);
                alertDialogBuilder
                        .setMessage("This will make course contents offline and sends notifications for new contents if enabled");
                alertDialogBuilder.setTitle("Add "
                        + mCourses.get(position).getShortname()
                        + " to favourites?");
                alertDialogBuilder.setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface arg0,
                                    int arg1) {
                                mCourse.setIsFavCourse(!mCourse
                                        .getIsFavCourse());
                                mCourse.save();

                                // Update listview
                                mCourses.get(position).setIsFavCourse(
                                        mCourse.getIsFavCourse());
                                courseListAdapter.notifyDataSetChanged();

                                // Start sync service for course
                                Intent i = new Intent(context,
                                        MDroidService.class);
                                i.putExtra("notifications", false);
                                i.putExtra("siteid",
                                        session.getCurrentSiteId());
                                i.putExtra("courseid",
                                        mCourse.getCourseid());
                                context.startService(i);

                            }
                        });
                alertDialogBuilder.setNegativeButton("No",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {

                            }
                        });

                AlertDialog alertDialog = alertDialogBuilder.create();
                alertDialog.show();
            }
        });

        return convertView;
    }

    @Override
    public int getCount() {
        return mCourses.size();
    }

    @Override
    public Object getItem(int position) {
        return mCourses.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
}

static class ViewHolder {
    TextView shortname;
    TextView fullname;
    ImageView favIcon;
}

/**
 * Syncs the courses of the current user in background and updates list *
 * 
 * @author Praveen Kumar Pendyala ([email protected] /cdn-cgi/l/email-protection)
 * 
 */
private class courseSyncerBg extends AsyncTask<String, Integer, Boolean> {

    @Override
    protected void onPreExecute() {
        swipeLayout.setRefreshing(true);
    }

    @Override
    protected Boolean doInBackground(String... params) {
        CourseSyncTask cs = new CourseSyncTask(session.getmUrl(),
                session.getToken(), session.getCurrentSiteId());
        return cs.syncUserCourses();
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (Type == TYPE_USER_COURSES)
            mCourses = MoodleCourse.find(MoodleCourse.class,
                    "siteid = ? and is_user_course = ?",
                    session.getCurrentSiteId() + "", "1");
        else if (Type == TYPE_FAV_COURSES)
            mCourses = MoodleCourse.find(MoodleCourse.class,
                    "siteid = ? and is_fav_course = ?",
                    session.getCurrentSiteId() + "", "1");
        else
            mCourses = MoodleCourse.find(MoodleCourse.class,
                    "siteid = ? and ", session.getCurrentSiteId() + "");
        courseListAdapter.notifyDataSetChanged();
        if (!mCourses.isEmpty())
            courseEmptyLayout.setVisibility(LinearLayout.GONE);
        swipeLayout.setRefreshing(false);
    }
}

@Override
public void onRefresh() {
    new courseSyncerBg().execute("");
}

}

请帮我解决问题。我已经在下面提到过。但我无法得到问题的答案。

http://stackoverflow.com/questions/10849552/update-viewpager-dynamically/17855730#17855730


你应该覆盖setUserVisibleHint方法在你的片段中,并把你刷新的代码放入其中

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
       if (isVisibleToUser && isResumed()) {

       }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在片段中的一个选项卡与另一个选项卡之间切换时动态刷新选项卡内容? 的相关文章

随机推荐