mardi 8 avril 2014

Java - pas rafraîchissant Android restartLoader feed - Stack Overflow


I am trying to refresh my ListView adapter with an updated feed. Below is the pasted code.


public class VideoBrowserListFragment extends ListFragment implements
LoaderManager.LoaderCallbacks<List<MediaInfo>> {

public VideoBrowserListFragment(){}

private VideoListAdapter mAdapter = null;



public static String VIDEO_URL =
"";



/*
* (non-Javadoc)
* @see android.support.v4.app.Fragment#onActivityCreated(android.os.Bundle)
*/
public void refreshweather(){
VIDEO_URL ="Weather Feed URL";
getListView().setFastScrollEnabled(true);
mAdapter = new VideoListAdapter(getActivity());
setEmptyText(getString(R.string.no_video_found));
setListAdapter(mAdapter);
setListShown(false);
getLoaderManager().initLoader(0, null, this);
System.out.println("Madapter"+mAdapter);
}

public void refreshnews(){


VIDEO_URL =
"News Feed URL";


getLoaderManager().destroyLoader(0);
mAdapter = new VideoListAdapter(getActivity());
setEmptyText(getString(R.string.no_video_found));
setListAdapter(mAdapter);
setListShown(false);
getLoaderManager().restartLoader(0, null, this);




}


@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
refreshweather();




}



/*
* (non-Javadoc)
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished(android
* .support.v4.content.Loader, java.lang.Object)
*/

@Override
public void onLoadFinished(Loader<List<MediaInfo>> arg0, List<MediaInfo> data) {
if(mAdapter != null){
mAdapter.setData(data);
}


if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}




/*
* (non-Javadoc)
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset(android
* .support.v4.content.Loader)
*/
@Override
public void onLoaderReset(Loader<List<MediaInfo>> arg0) {
mAdapter.setData(null);

}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {

MediaInfo selectedMedia = mAdapter.getItem(position);
handleNavigation(selectedMedia, false);





}

private void handleNavigation(MediaInfo info, boolean autoStart) {
Intent intent = new Intent(getActivity(), LocalPlayerActivity.class);
intent.putExtra("media", Utils.fromMediaInfo(info));
intent.putExtra("shouldStart", autoStart);
getActivity().startActivity(intent);
System.out.println("VIDEO URL"+VIDEO_URL);

refreshnews();
System.out.println("VIDEO URL"+VIDEO_URL);

}

/*
* (non-Javadoc)
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onCreateLoader(int,
* android.os.Bundle)
*/

@Override
public Loader<List<MediaInfo>> onCreateLoader(int arg0, Bundle arg1) {

return new VideoItemLoader(getActivity(), VIDEO_URL);

}




public static VideoBrowserListFragment newInstance() {
VideoBrowserListFragment f = new VideoBrowserListFragment();
Bundle b = new Bundle();
f.setArguments(b);
return f;
}

public static VideoBrowserListFragment newInstance(Bundle b) {
VideoBrowserListFragment f = new VideoBrowserListFragment();
f.setArguments(b);
return f;
}

}


VIDEO_URL is the link to the feed. I made it so it calls refreshweather() right away. I also made a function for refreshnews, which should restart the loader with a different VIDEO_URL. For testing purposes, i am calling refreshnews() when you click a list item. It refreshes the feed, but it still pulls the same weather feed and not the news. Shouldn't the new loader be pulling in the updated VIDEO_URL variable and feed after a listitem is clicked?


Anybody have an idea why? I am still a little new to android and java.



I am trying to refresh my ListView adapter with an updated feed. Below is the pasted code.


public class VideoBrowserListFragment extends ListFragment implements
LoaderManager.LoaderCallbacks<List<MediaInfo>> {

public VideoBrowserListFragment(){}

private VideoListAdapter mAdapter = null;



public static String VIDEO_URL =
"";



/*
* (non-Javadoc)
* @see android.support.v4.app.Fragment#onActivityCreated(android.os.Bundle)
*/
public void refreshweather(){
VIDEO_URL ="Weather Feed URL";
getListView().setFastScrollEnabled(true);
mAdapter = new VideoListAdapter(getActivity());
setEmptyText(getString(R.string.no_video_found));
setListAdapter(mAdapter);
setListShown(false);
getLoaderManager().initLoader(0, null, this);
System.out.println("Madapter"+mAdapter);
}

public void refreshnews(){


VIDEO_URL =
"News Feed URL";


getLoaderManager().destroyLoader(0);
mAdapter = new VideoListAdapter(getActivity());
setEmptyText(getString(R.string.no_video_found));
setListAdapter(mAdapter);
setListShown(false);
getLoaderManager().restartLoader(0, null, this);




}


@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
refreshweather();




}



/*
* (non-Javadoc)
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished(android
* .support.v4.content.Loader, java.lang.Object)
*/

@Override
public void onLoadFinished(Loader<List<MediaInfo>> arg0, List<MediaInfo> data) {
if(mAdapter != null){
mAdapter.setData(data);
}


if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}




/*
* (non-Javadoc)
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset(android
* .support.v4.content.Loader)
*/
@Override
public void onLoaderReset(Loader<List<MediaInfo>> arg0) {
mAdapter.setData(null);

}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {

MediaInfo selectedMedia = mAdapter.getItem(position);
handleNavigation(selectedMedia, false);





}

private void handleNavigation(MediaInfo info, boolean autoStart) {
Intent intent = new Intent(getActivity(), LocalPlayerActivity.class);
intent.putExtra("media", Utils.fromMediaInfo(info));
intent.putExtra("shouldStart", autoStart);
getActivity().startActivity(intent);
System.out.println("VIDEO URL"+VIDEO_URL);

refreshnews();
System.out.println("VIDEO URL"+VIDEO_URL);

}

/*
* (non-Javadoc)
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onCreateLoader(int,
* android.os.Bundle)
*/

@Override
public Loader<List<MediaInfo>> onCreateLoader(int arg0, Bundle arg1) {

return new VideoItemLoader(getActivity(), VIDEO_URL);

}




public static VideoBrowserListFragment newInstance() {
VideoBrowserListFragment f = new VideoBrowserListFragment();
Bundle b = new Bundle();
f.setArguments(b);
return f;
}

public static VideoBrowserListFragment newInstance(Bundle b) {
VideoBrowserListFragment f = new VideoBrowserListFragment();
f.setArguments(b);
return f;
}

}


VIDEO_URL is the link to the feed. I made it so it calls refreshweather() right away. I also made a function for refreshnews, which should restart the loader with a different VIDEO_URL. For testing purposes, i am calling refreshnews() when you click a list item. It refreshes the feed, but it still pulls the same weather feed and not the news. Shouldn't the new loader be pulling in the updated VIDEO_URL variable and feed after a listitem is clicked?


Anybody have an idea why? I am still a little new to android and java.


0 commentaires:

Enregistrer un commentaire