2013-08-16 5 views
2

Android의 ViewPager와 관련된 문제가 있습니다. 나는 현재 VerticalViewPager를 구현하려고 시도하고있다. (이 문제는 일반적인 ViewPager에서 발생하는 문제와 관련이 없다.) 내 데이터베이스에서 물건을 가져 와서 화면에 입력하는 커스텀 PagerAdapter가있다.첫 번째 뷰 페이지 페이지가 비어 있습니다.

문제는 내 첫 번째 카드를 다음 페이지로 넘기고 다시 돌아올 때까지 비워 두는 것입니다. 그 후에 내용은 거기있다. 나는 누군가가이 문제에 대해 밝힐 수 있기를 바랍니다. 나는 비슷한 문제를 여기에 발견 : Why is the first view in ViewPager appearing empty?Activity using ViewPager, PagerAdapter and AsyncTask causes a blank view하지만 거기에 아무 것도 나를 도울 수있는 것 같습니다.

내 사용자 정의 PagerAdapter 코드 :

public class BeginnerCardCursorPagerAdapter extends PagerAdapter { 
    private Cursor cursor; 
    private LayoutInflater inflater; 

    public BeginnerCardCursorPagerAdapter(Context context, Cursor cursor){ 
     this.cursor = cursor; 
     this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public void swapCursor(Cursor cursor){ 
     this.cursor = cursor; 
    } 

    @Override 
    public void destroyItem(View view, int position, Object object) { 
     ((VerticalViewPager) view).removeView((RelativeLayout) object); 
    } 

    @Override 
    public int getCount() { 
     if(cursor == null) { 
      return 0; 
     } else { 
      return 90; 
     } 
    } 

    @Override 
    public Object instantiateItem(View view, int position) { 
     RelativeLayout layout = null; 
     int position2 = position; 
     if(position == 0){ 
      layout = (RelativeLayout) inflater.inflate(R.layout.activity_slide_info, null); 
     }if(position == 89){ 
      layout = (RelativeLayout) inflater.inflate(R.layout.activity_advertisement_beginner, null); 
     } 
     else if(position > 0 && position < 89){ 
      position2--; 
      cursor.moveToPosition(position2); 
      layout = (RelativeLayout) inflater.inflate(R.layout.activity_card, null); 
      layout.setBackgroundResource(R.drawable.card_beginner); 
      TextView cardTitle = (TextView) layout.findViewById(R.id.pirate_card_title); 
      TextView cardExample = (TextView) layout.findViewById(R.id.pirate_card_example); 
      TextView cardDefinition = (TextView) layout.findViewById(R.id.pirate_card_definition); 

      cardTitle.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_TITLE))); 
      cardExample.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_SENTENCE))); 
      cardDefinition.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_DEFINITION))); 
     } 
     ((VerticalViewPager) view).addView(layout); 
     return layout; 
    } 

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

destroyitem 메서드에서이 선 ((VerticalViewPager) 뷰) .removeView ((RelativeLayout) 객체)를 제거합니다. –

+0

불행히도, 주사위 없음 – user2525981

+0

동적 높이 viewpager를 사용하고 있습니까? – Govind

답변

0

카드에 데이터가 추가되고 loaded.Try이 후 업데이트되지 데이터베이스 및보기에서 데이터를로드하는 데 시간이 걸리는 때문에 문제가 있어야합니다

handler.postDelayed(r=new Runnable() 
     { 
      @Override 
      public void run() { 
       if (mPosition == position) 
       { 

        notifyDataSetChanged(); 
        handler.removeCallbacks(r); 


       } 
      } 
     }, 1000); 

내부에는 어댑터의 instantiateItem이므로보기를 만들 때 1 초 후에 업데이트됩니다. mPosition은 열리고있는 첫 번째 카드의 위치입니다. 목록의 항목을 클릭하여 뷰 페이지를 열면 adapter.else를 호출 할 때 선택중인 항목의 위치를 ​​전달해야합니다. mPostion을 0으로 설정할 수 있습니다. 첫 번째 항목이 항상 처음에 뷰 페이지에서 열리는 경우

0

ViewPagers에서 동일한 문제가 발생했습니다.이 항목을 Fragments와 함께 사용했습니다. 첫 번째 페이지 안의 조각은 항상 비어 있었고 두 번째 페이지는 괜찮 았고 두 번째 또는 세 번째 페이지에서 돌아 왔을 때 첫 페이지는 괜찮 았습니다.

내가 조각에서 onCreateView 메서드의 데이터베이스에서 데이터를로드했다는 것을 알게 된 이유는 데이터베이스에서 데이터가로드되기 전에 뷰가 만들어 졌기 때문입니다. 조각의 onStart 메소드에서 데이터를로드하도록 코드를 변경했는데 모든 것이 잘되었습니다.

@Override 
public void onStart() { 
    getActivity().getLoaderManager().initLoader(LOADER_ID,null, this); 
    super.onStart(); 
} 

희망이 있습니다.

관련 문제