我有一个名为CourseActivity.java的Activity,因为我有两个名称为UserCourses和FavouriteCourses的标签。我在第一个标签中有一些课程列表。它有图标,在选择图标时te粗略将被添加到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 (praveen@praveenkumar.co.in)
*
*/
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
答案 0 :(得分:1)
您应该覆盖片段中的setUserVisibleHint
方法并将更新代码放入其中
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && isResumed()) {
}
}