2012-01-14 37 views
5

Làm cách nào để có được một ListView sử dụng SimpleCursorAdapter để hiển thị trong một ViewPager? Máy nhắn tin một mình hoạt động tốt và ListView hoạt động ok trong một ListActivity, nhưng tôi không biết làm thế nào để làm cho nó hoạt động trong một hoạt động (có thể đó là vấn đề).SimpleCursorAdapter trên ViewPager

public class Player extends Activity { 
private ViewPager pager; 
private static int NUMERO_DE_TELAS = 3; 
private AdaptadorDeTelas adaptador; 

//Para debug apagar no final  
final String BABAS = "babas"; 

ContentResolver mContentResolver; 

ListView listView; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //Adaptador para criar o viewpager 
    adaptador = new AdaptadorDeTelas(); 
    pager = (ViewPager)findViewById(R.id.pageradapter); 
    pager.setAdapter(adaptador);   

    pager.setCurrentItem(1);  





} 
private class AdaptadorDeTelas extends PagerAdapter{ 

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

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


     View layout; 
     LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if(position == 0){ 
     layout = inflater.inflate(R.layout.layout_zero, null); 
     }else if(position == 1){ 
      layout = inflater.inflate(R.layout.layout_um, null); 
     }else{ 


      Uri todasMusicas = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

      //Seleciona as tabelas a serem retornadas do content audio.media 
      String[] projection = {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE 
      }; 

      //Pega todas as músicas no aparelho 
      String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 


      Cursor cursor; 

      cursor = Player.this.managedQuery(
       todasMusicas, 
       projection, 
       selection, 
       null, 
       MediaStore.Audio.Media.TITLE + " ASC"); 



     String[] from = new String []{MediaStore.Audio.Media.TITLE}; 
     int[] to = new int[] {R.id.textView1}; 

     View v = (View) findViewById(R.layout.layout_dois); 

     listView = (ListView) findViewById(R.id.listView1); 
     SimpleCursorAdapter meuAdaptador = new SimpleCursorAdapter(Player.this,   R.layout.layout_dois, cursor, from, to); 

     listView.setAdapter(meuAdaptador); 

     layout = listView;; 
     } 



     ((ViewPager)collection).addView((View) layout, 0);     

     return layout; 


    } 


    @Override 
    public void destroyItem(View collection, int position, Object view){ 
     ((ViewPager) collection).removeView((View)view); 

    } 

    @Override 
    public boolean isViewFromObject(View view, Object object){ 
     return view==((View)object); 
    } 

    @Override 
    public void finishUpdate(View arg0){} 

    @Override 
    public void restoreState(Parcelable arg0, ClassLoader arg1){} 

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

    @Override 
    public void startUpdate(View arg0){} 


} 

Tôi đang cố gắng hiển thị danh sách các bản nhạc trong thẻ sd ở một trong các trang của ViewPager, cảm ơn trước cho bất kỳ ai trợ giúp.

Ps: Xin lỗi vì tiếng anh không tốt và tiếng Bồ Đào Nha trong các nhận xét trong mã.

Đây là lỗi được hiển thị trên LogCat:

01-15 16:48:41.623: W/dalvikvm(270): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
01-15 16:48:41.653: E/AndroidRuntime(270): FATAL EXCEPTION: main 
01-15 16:48:41.653: E/AndroidRuntime(270): java.lang.NullPointerException 
01-15 16:48:41.653: E/AndroidRuntime(270): at br.com.babas.player.Player$AdaptadorDeTelas.instantiateItem(Player.java:113) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:321) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.support.v4.view.ViewPager.populate(ViewPager.java:441) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.support.v4.view.ViewPager.onAttachedToWindow(ViewPager.java:563) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.view.View.dispatchAttachedToWindow(View.java:6016) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1116) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1121) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1121) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1121) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1121) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.view.ViewRoot.performTraversals(ViewRoot.java:727) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.os.Looper.loop(Looper.java:123) 
01-15 16:48:41.653: E/AndroidRuntime(270): at android.app.ActivityThread.main(ActivityThread.java:4627) 
01-15 16:48:41.653: E/AndroidRuntime(270): at java.lang.reflect.Method.invokeNative(Native Method) 
01-15 16:48:41.653: E/AndroidRuntime(270): at java.lang.reflect.Method.invoke(Method.java:521) 
01-15 16:48:41.653: E/AndroidRuntime(270): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-15 16:48:41.653: E/AndroidRuntime(270): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-15 16:48:41.653: E/AndroidRuntime(270): at dalvik.system.NativeStart.main(Native Method) 
+0

gì đang xảy ra khi bạn chạy nó? Bạn đang nhận được một lỗi hoặc chỉ là không có gì hiển thị ví dụ? –

+0

Đã chỉnh sửa bài đăng có nhật ký lỗi, đó là NullPointerException. –

Trả lời

2

Vâng, một vấn đề tôi có thể thấy là bạn đã có những sai id khi tham chiếu một số chế độ xem, khi bạn đã chuyển cho nó một số nhận dạng bố cục:

View v = (View) findViewById(R.layout.layout_dois); 

Danh sách xem của bạn ngay bên dưới nó cũng sẽ rỗng. Tôi giả định đây là bố cục "layout_dois"?

Kinda vẻ như bạn chỉ nên thay đổi nó để nó đọc:

View v = inflater.inflate(R.layout.layout_dois, null); 
listView = (ListView) v.findViewById(R.id.listView1); 
+0

Điều này giải quyết được vấn đề, giờ đây nó đang hoạt động rất tốt. Vì tôi chưa thể đưa ra +1, tôi chỉ có thể nói cảm ơn bạn rất nhiều. –

0

của nó khá đơn giản.
Tạo đối tượng listView trong xml của bạn.
Khởi tạo nó trong tệp mã/hoạt động của bạn dưới dạng:
ListView myListView = (ListView)findViewById(R.id.YOUR_LIST_VIEW_ID_IN_XML)

Bây giờ, hãy tạo bộ điều hợp cho nó.
Nếu bạn muốn đưa một số hướng dẫn cho bộ chuyển đổi con trỏ, kiểm tra:
http://android-support-akkilis.blogspot.com/2011/11/simple-cursor-adapter-made-easy.html
Bây giờ thiết lập các bộ chuyển đổi tương tự vào danh sách của bạn như
myListView.setAdapter(new MyCursorAdapter).

+0

Tôi nghĩ rằng đó chính xác là những gì tôi đang làm trong mã của tôi, nhưng tôi sẽ kiểm tra liên kết của bạn để xem nếu tôi bỏ lỡ một cái gì đó. cám ơn. –

Các vấn đề liên quan