1

나는이 ViewPager. Getting wrong cursor in SimpleCursorAdapter과 비슷한 상황이며이 ViewPager Cursor positon이지만 질문에는 해당 답변이 없었습니다.ViewPager 오프셋 커서 위치

상황

나는 데이터베이스 (커서)에서 내 viewpager에서 뷰를로드하고 있습니다. 항목 (Buttons, TextViews 등)의 텍스트를 설정하면 예상 된 위치에 올바른 커서가 표시됩니다. 그러나 내가하려고 할 때 button.getText() 그것은 데이터베이스의 다음 위치에서 텍스트를 보여줍니다 (버튼 등과 동일). 사용자가 앞으로 와이프하면, 커서는 다음 위치에 값을 반환하고 사용자가 뒤로 스 와이프하면, 그래서 앞으로 보내 주시면 위치 x에서 이전 위치

에서 값을 반환 위치 x + 1에 커서를 반환하고 뒤로 보내 주시면 것은받은 위치에 커서를 반환 x - 1. 어떻게 해결할 수 있습니까? 이 도움을 받았으면 내

public Object instantiateItem(View view, int position) { 

     cursor.moveToPosition(position); 
     int cus = cursor.getPosition(); 
     Log.d(DBHelper.TAG, Integer.toString(cus) + " current cursor position "); 

     final ViewPager pager = (ViewPager) view.findViewById(R.id.pager_nav); 
     ScrollView layout = (ScrollView) inflater.inflate(R.layout.question_activity, null); 

     if (cursorCategory != null && cursorCategory.moveToFirst()){ 
      String s = cursorCategory.getString(cursorCategory.getColumnIndex("name")); 
      ((TextView)layout.findViewById(R.id.text_category)).setText(s); 
     } 

     Typeface tpf = Typeface.createFromAsset(context.getAssets(), "Roboto-Light.ttf"); 
     String text = cursor.getString(cursor.getColumnIndex("question_text")); 
     TextView question_text = (TextView)layout.findViewById(R.id.text_question); 
     question_text.setText(text); 
     Log.d("question_text", question_text.getText() + " " + position + " " + text); 
     question_text.setTypeface(tpf); 

     final String qPos = Integer.toString(position + 1) + "."; 
     TextView question_position = (TextView) layout.findViewById(R.id.text_position); 
     question_position.setText(qPos); 
     question_position.setTypeface(tpf); 

     this.rightAnswer = cursor.getString(cursor.getColumnIndex(DBHelper.RIGHT_ANSWER)); 
     this.wrongAnswer1 = cursor.getString(cursor.getColumnIndex(DBHelper.WRONG_ANSWER1)); 
     this.wrongAnswer2 = cursor.getString(cursor.getColumnIndex(DBHelper.WRONG_ANSWER2)); 

     optionsArray = new ArrayList<String>(); 
     optionsArray.clear(); 
     optionsArray.add(this.rightAnswer); 
     optionsArray.add(this.wrongAnswer1); 
     optionsArray.add(this.wrongAnswer2); 
     Collections.shuffle(optionsArray); 

     option1 = (Button) layout.findViewById(R.id.button_option1); 
     option1.setText((CharSequence) this.optionsArray.get(0)); 

     option2 = (Button) layout.findViewById(R.id.button_option2); 
     option2.setText((CharSequence) this.optionsArray.get(1)); 

     option3 = (Button) layout.findViewById(R.id.button_option3); 
     option3.setText((CharSequence) this.optionsArray.get(2)); 

     if (this.optionsArray.get(0).equalsIgnoreCase(this.rightAnswer)) { 
      this.option1.setTag(DBHelper.RIGHT_ANSWER); 
     } else if (!this.rightAnswer.equalsIgnoreCase((String) this.optionsArray.get(0))) { 
      this.option1.setTag("wrong"); 
     } 

     if (this.rightAnswer.equalsIgnoreCase((String) this.optionsArray.get(1))) { 
      this.option2.setTag(DBHelper.RIGHT_ANSWER); 
     } else if (!this.rightAnswer.equalsIgnoreCase((String) this.optionsArray.get(1))) { 
      this.option2.setTag("wrong"); 
     } 

     if (this.rightAnswer.equalsIgnoreCase((String) this.optionsArray.get(2))) { 
      this.option3.setTag(DBHelper.RIGHT_ANSWER); 
     } else if (!this.rightAnswer.equalsIgnoreCase((String) this.optionsArray.get(2))){ 
      this.option3.setTag("wrong"); 
     } 

     private int getItem(int i) { 
      return i += pager.getCurrentItem(); 
     } 
    }); 

    option1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      String Tag = option1.getTag().toString(); 
      Toast.makeText(context, Tag + " " + option1.getText(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    option2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      String Tag = option2.getTag().toString(); 
      Toast.makeText(context, Tag + " " + option2.getText(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    option3.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      String Tag = option3.getTag().toString(); 
      Toast.makeText(context, Tag + " " + option3.getText(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 

PagerAdapter.instantiateItem 그리고 내 onLoadFinished()

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 

    switch (loader.getId()) { 
    case QUESTION_TEXT: 
     Log.d(" Selection Position", " Selection Position" + selcectionPosition); 
     Log.d(" Activity Position", cursor.getPosition() + " Activity Position"); 
     mAdapter.swapCursor(cursor); 
     mAdapter.notifyDataSetChanged(); 
     pager.setCurrentItem(selcectionPosition, true); 
     break; 
    } 
} 

입니다.

답변

1

면책 조항 : 문제의 해결책이 아닐 수도 있습니다.

나는 똑같은 문제에 직면했다. 당신이 쓴 것을 읽은 후에 나는 우리를 도울 뭔가를 찾아 보았습니다.

내가이 사용하여 그것을 해결 : 내 프로젝트에 How do you get the current page number of a ViewPager for Android?

을, 나는 각 페이지에 버튼 클릭에 해당이 대화는 다음에 커서의 현재 위치에서 문자열을 얻을 것, 대화 상자를 발생하게했다 .

커서의 위치가 현재 표시된 페이지와 일치하지 않습니다. ViewPager가 커서 위치를 변경하여 페이지를 미리로드하기 때문입니다.

그래서 커서를 현재보고있는 올바른 위치로 강제 이동해야합니다.

이렇게하려면 cursor.moveToPosition (viewpager.getCurrentItem())을 사용합니다. 커서가보고있는 것을 따라 가는지 확인하십시오.

이 정보가 도움이되기를 바랍니다.