2012-03-25 4 views
2

Ich bin Ansichten (nicht Fragmente) in meiner Viewpager-Implementierung aufblasen. Meine Hauptklasse erweitert Aktivität.ListView nicht in ViewPager gefunden Zeige Inflater-Implementierung

Die Seite 1 des viewpager bläht eine Ansicht auf, die aus Textansichten besteht. Seite 2 bläst ein Achartengine-Diagramm auf. Alles funktioniert gut.

Page 3 soll eine Listenansicht mit einem benutzerdefinierten Adapter aufblasen. Da ich jedoch nur die Aktivität erweitert habe, ist setListAdapter nicht verfügbar.

Wenn ich die Hauptklasse ändern ListActivity zu verlängern, dann scheitert die gesamte Aktivität auf Last, weil es nicht die android.R.id.list Ansicht finden (weil es ist noch nicht aufgeblasen)

Dies ist der instantiate Code I

public class SummaryPagerAdapteri extends PagerAdapter{ 

    @Override 
    public int getCount() { 
     return 5; 
    } 

    @Override 
    public Object instantiateItem(View collection, int position) { 

     LayoutInflater inflater = (LayoutInflater) collection.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     int resId = 0; 
     View view = null; 
     switch (position) { 
     case 0: 
      //find and inflate the view 
      resId = R.layout.recordsummary_one; 
      view = inflater.inflate(resId, null); 

    //do stuff 
      break; 
     case 1: 
    //find and inflate the view 
      resId = R.layout.recordsummary_two; 
      view = inflater.inflate(resId, null); 
      Context ctx = view.getContext(); 
      //do stuff 
      break; 
     case 2: 
      resId = R.layout.recordsummary_three; 
      view = inflater.inflate(resId, null); 
      Context tctx = view.getContext(); 
      if(pdn != null){ 
      adapter = new SummaryNotesAdapter(tctx,pdn); 
      setListAdapter(adapter); 
      }     
      break; 
     case 3: 
      resId = R.layout.recordsummary_four; 
      view = inflater.inflate(resId, null); 
    //ToDo 
      break; 
     case 4: 
      resId = R.layout.recordsummary_five; 
      view = inflater.inflate(resId, null); 
    //ToDo 
      break; 
     } 

     ((ViewPager) collection).addView(view, 0); 

     return view; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 

    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == ((View) arg1); 

    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 
} 

Irgendwelche Ideen sind mit, wie ich setListAdapter (Adapter) ohne Verlängerung Listview verwenden kann, oder wie ich Listview ohne die Aktivität verlängern kann versagt, wenn es nicht die uninflated Ansicht findet auf erste Ladung?

Vielen Dank

Dave

Antwort

1

aufpumpen eine regelmäßige Listview für Seite 3 und rufen ListView.setAdapter() den Adapter zu setzen. In Ihrem Code wird dies entweder:

ListView listView = (ListView) inflater.inflate(resId, null); 
listView.setAdapter(adapter); 

oder

view = inflater.inflate(resId, null); 
ListView listView = (ListView) view.findViewById(R.id.id_of_your_listview); 
listView.setAdapter(adapter); 
+0

Dank adamk arbeitet einen Reiz. Ich habe die zweite Option benutzt. Bei der Verwendung musste ich die Listview-ID in der Layout-Datei von "@android: id/list" in "@ + id/whatever_you_want" ändern. – DaveSav

Verwandte Themen