2016-11-09 79 views
0

我有活動叫做CourseActivity.java,因爲我有兩個選項卡的名稱UserCourses和FavouriteCourses.I在第一個選項卡中有一些課程列表。並且它有圖標,在選擇圖標te時,相應的粗體將被添加到Favouritecourse列表中。但我的問題是,當我去最喜歡的課程標籤,內容不會更新,直到我刷新它或我登出並再次登錄到應用程序。如何動態刷新標籤內容,同時在一個標籤之間切換到其他片段?

這裏是CoarseActivity.java.This將派當然類型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]) 
* 
*/ 
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

回答

1

你應該重寫你的片段setUserVisibleHint方法,把你耳目一新的代碼在它

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

     } 
    } 
+0

謝謝你一個負荷先生。它在一分鐘內解決了我的問題。大而簡單的答案。再次感謝 –

+0

不客氣@DeepaMG –

相關問題