J'utilise le menu swipe tab
pour générer la vue de l'application, au démarrage, je suis en dehors de générer la mise en page pour les onglets, je cours également async task
, qui est Lecteur Rss. En ce moment j'ai trois onglets, le flux Rss est sur le premier onglet. Le problème est quand je vais au troisième onglet et de nouveau au premier, le flux disparaît. Je pense que c'est parce que le async task
qui récupère le flux Rss ne fonctionne que dans l'activité principale, mais quand j'essaie d'appeler cette tâche lorsque le premier onglet est rendu, je reçois null pointer exception
pour text view
(si aucune connexion réseau) ou listview
, Je ne sais pas pourquoi cela ne pointe pas vers la mise en page correcte, des idées?Android tâche asynchrone avec affichage du contenu différent et onglets de balayage
C'est le code pour la tâche async:
public class GetRSSDataTask extends AsyncTask<String, Void, List<RssItem>> {
private Activity ownerActivity;
private Exception exceptionToBeThrown;
@Override
protected List<RssItem> doInBackground(String... urls) {
// Debug the task thread name
Log.d("RssReader", Thread.currentThread().getName());
try {
// Create RSS reader
RssReader rssReader = new RssReader(urls[0]);
// Parse RSS, get items
return rssReader.getItems();
} catch (Exception e) {
Log.e("RssReader", e.getMessage());
exceptionToBeThrown = e;
}
return null;
}
@Override
protected void onPostExecute(List<RssItem> result) {
if (exceptionToBeThrown != null) {
TextView error = (TextView) findViewById(R.id.errorMessage);
error.setText("No internet connection"); //Null pointer expection
} else {
// Get a ListView from main view
ListView listItems= (ListView) findViewById(R.id.listMainView); //Null pointer exception
// Create a list adapter
ArrayAdapter<RssItem> adapter = new ArrayAdapter<RssItem>(local, android.R.layout.simple_list_item_1, result);
// Set list adapter for the ListView
listItems.setAdapter(adapter);
// Set list view item click listener
listItems.setOnItemClickListener(new ListListener(result, local));
}
}
}
Voici le code pour mon onglet Flux rss:
public class RssFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
new MainActivity();
MainActivity ma = new MainActivity();
GetRSSDataTask task = ma.new GetRSSDataTask();
task.execute("newsrss.bbc.co.uk/rss/newsonline_uk_edition/world/rss.xml");
View rootView = inflater.inflate(R.layout.fragment_rss_news, container, false);
return rootView;
}
}
On crée l'activité principale:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set reference to this activity
local = this;
GetRSSDataTask task = new GetRSSDataTask();
// Start download RSS task
task.execute("newsrss.bbc.co.uk/rss/newsonline_uk_edition/world/rss.xml");
// Debug the thread name
Log.d("RssReader", Thread.currentThread().getName());
// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
//actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
C'est une bonne idée, mais la classe 'Fragment' fait partie de la bibliothèque Android – Thorviory
@ TheSortOfProgrammer je veux dire votre Fragment, qui est RssFragment –
J'ai essayé cela, mais cela signifierait que je devrais étendre la classe par activité et ce n'est pas possible, comme son Fragment déjà étendu – Thorviory