2014-01-22 2 views
0

Я пытаюсь заставить ViewPager работать, но один раздел моего кода вызывает проблему. Раздел кода, который является проблематичным, размещен непосредственно ниже. Из того, что, как я подозреваю, мои TextViews повторно обновляются, поскольку позиция повторяется до значения, установленного в методе getCount(), который является размером моего массива.ViewPager и обновление TextView; Неустранимое исключение?

В любом случае, все это мой код в полном объеме, поскольку у меня его пока нет.

Проблемный код из ViewPagerAdapter.java

  // Capture position and set to the TextViews 
      tvNumber.setText(arrayAtomicNum.get(position)); 
      tvSymbol.setText(arraySymbol.get(position)); 
      tvName.setText(arrayName.get(position)); 
      tvGroup.setText(arrayGroup.get(position)); 
      tvPeriod.setText(arrayPeriod.get(position)); 
      tvBlock.setText(arrayBlock.get(position)); 
      tvFamily.setText(arrayFamily.get(position)); 
      tvColor.setText(arrayColor.get(position)); 
      tvPhase.setText(arrayPhase.get(position)); 
      tvNeutrons.setText(arrayNeutrons.get(position)); 
      tvProtons.setText(arrayProtons.get(position)); 
      tvElectrons.setText(arrayElectrons.get(position)); 

Вот весь класс, ViewPagerAdapter.java

public class ViewPagerAdapter extends PagerAdapter { 
    public static String TAG = ViewPagerAdapter.class.getSimpleName(); 

    Context context; 
    LayoutInflater inflater; 


    List<Integer> arrayAtomicNum = new ArrayList<Integer>(); 
    List<String> arrayName = new ArrayList<String>(); 
    List<String> arraySymbol = new ArrayList<String>(); 
    List<String> arrayFamily = new ArrayList<String>(); 
    List<String> arrayPhase = new ArrayList<String>(); 
    List<String> arrayColor = new ArrayList<String>(); 
    List<Integer> arrayGroup = new ArrayList<Integer>(); 
    List<Integer> arrayPeriod = new ArrayList<Integer>(); 
    List<String> arrayBlock = new ArrayList<String>(); 
    List<Integer> arrayProtons = new ArrayList<Integer>(); 
    List<Integer> arrayNeutrons = new ArrayList<Integer>(); 
    List<Integer> arrayElectrons = new ArrayList<Integer>();  


    public ViewPagerAdapter(Context context, List<Integer> arrayAtomicNum, 
      List<String> arrayName, List<String> arraySymbol, List<String> arrayFamily, 
      List<String> arrayPhase, List<String> arrayColor, List<Integer> arrayGroup, 
      List<Integer> arrayPeriod, List<String> arrayBlock, List<Integer> arrayProtons, 
      List<Integer> arrayNeutrons, List<Integer> arrayElectrons) { 
     this.context = context; 
     this.arrayAtomicNum = arrayAtomicNum; 
     this.arrayName = arrayName; 
     this.arraySymbol = arraySymbol; 
     this.arrayFamily = arrayFamily; 
     this.arrayPhase = arrayPhase; 
     this.arrayColor = arrayColor; 
     this.arrayGroup = arrayGroup; 
     this.arrayPeriod = arrayPeriod; 
     this.arrayBlock = arrayBlock; 
     this.arrayProtons = arrayProtons; 
     this.arrayNeutrons = arrayNeutrons; 
     this.arrayElectrons = arrayElectrons; 

    } 


    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     //return 0; 
     return arrayAtomicNum.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     // TODO Auto-generated method stub 
     //return false; 
     return view == ((RelativeLayout) object); 

    } 

    @Override 
     public Object instantiateItem(ViewGroup container, int position) { 

      // Declare Variables 
      TextView tvNumber; // container for atomic number 
      TextView tvSymbol; // container for symbol 
      TextView tvName; // container for name 
      TextView tvGroup; // container for group 
      TextView tvPeriod; // container for period 
      TextView tvBlock; // container for block 
      TextView tvFamily; // container for family 
      TextView tvColor; // container for color 
      TextView tvPhase; // container for phase 
      TextView tvNeutrons; // container for neutrons 
      TextView tvProtons; // container for protons 
      TextView tvElectrons; // container for electrons 

      inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View itemView = inflater.inflate(R.layout.frame_learn, container, 
        false); 

      // Locate the TextViews in viewpager_item.xml 
      // atomic number textView 
      tvNumber = (TextView)itemView.findViewById(R.id.metanumber); 

      // symbol textView 
      tvSymbol = (TextView)itemView.findViewById(R.id.metasymbol); 

      // name textView 
      tvName = (TextView)itemView.findViewById(R.id.metaname); 

      // group textView 
      tvGroup = (TextView)itemView.findViewById(R.id.metagroup); 

      // period textView 
      tvPeriod = (TextView)itemView.findViewById(R.id.metaperiod); 

      // block textView 
      tvBlock = (TextView)itemView.findViewById(R.id.metablock); 

      // family textView 
      tvFamily = (TextView)itemView.findViewById(R.id.metafamily); 

      // color textView 
      tvColor = (TextView)itemView.findViewById(R.id.metacolor); 

      // phase textView 
      tvPhase = (TextView)itemView.findViewById(R.id.metaphase); 

      // neutrons textView 
      tvNeutrons = (TextView)itemView.findViewById(R.id.metaneutrons); 

      // protons textView 
      tvProtons = (TextView)itemView.findViewById(R.id.metaprotons); 

      // electrons textView 
      tvElectrons = (TextView)itemView.findViewById(R.id.metaelectrons); 

      //comment out the setText and logs will print out full arrayLists 
      Log.d(TAG, "arrayAtomicNum.get(position): " + arrayAtomicNum.get(position)); 
      Log.d(TAG, "arraySymbol.get(position): " + arraySymbol.get(position)); 
      Log.d(TAG, "arrayName.get(position): " + arrayName.get(position)); 

      // Capture position and set to the TextViews 
      tvNumber.setText(arrayAtomicNum.get(position)); 
      tvSymbol.setText(arraySymbol.get(position)); 
      tvName.setText(arrayName.get(position)); 
      tvGroup.setText(arrayGroup.get(position)); 
      tvPeriod.setText(arrayPeriod.get(position)); 
      tvBlock.setText(arrayBlock.get(position)); 
      tvFamily.setText(arrayFamily.get(position)); 
      tvColor.setText(arrayColor.get(position)); 
      tvPhase.setText(arrayPhase.get(position)); 
      tvNeutrons.setText(arrayNeutrons.get(position)); 
      tvProtons.setText(arrayProtons.get(position)); 
      tvElectrons.setText(arrayElectrons.get(position)); 

      // Add viewpager_item.xml to ViewPager 
      ((ViewPager) container).addView(itemView); 

      return itemView; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      // Remove viewpager_item.xml from ViewPager 
      ((ViewPager) container).removeView((RelativeLayout) object); 

     } 
} 

я заполнить мои ArrayLists в другой деятельности под названием LearnActivity.java

public class LearnActivity extends Activity { 
    public static String TAG = LearnActivity.class.getSimpleName(); 

    ViewPager viewPager; 
    PagerAdapter adapter; 

    private int atomicNum = 0; 

    private int temp1; 
    private int temp2; 

    List<Integer> arrayAtomicNum = new ArrayList<Integer>(); 
    List<String> arrayName = new ArrayList<String>(); 
    List<String> arraySymbol = new ArrayList<String>(); 
    List<String> arrayFamily = new ArrayList<String>(); 
    List<String> arrayPhase = new ArrayList<String>(); 
    List<String> arrayColor = new ArrayList<String>(); 
    List<Integer> arrayGroup = new ArrayList<Integer>(); 
    List<Integer> arrayPeriod = new ArrayList<Integer>(); 
    List<String> arrayBlock = new ArrayList<String>(); 
    List<Integer> arrayProtons = new ArrayList<Integer>(); 
    List<Integer> arrayNeutrons = new ArrayList<Integer>(); 
    List<Integer> arrayElectrons = new ArrayList<Integer>(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_learn); 
     Log.d(TAG, "Learn layout loaded successfully"); 

     while (atomicNum < 3) { 
     atomicNum++; 

     if (atomicNum == 1) { 
      ElementStructure.setName("Hydrogen"); 
      ElementStructure.setSymbol("H"); 
      ElementStructure.setFamily("Non metals"); 
      ElementStructure.setPhase("Gas"); 
      ElementStructure.setColor("Colorless"); 
      ElementStructure.setAtomicNum(atomicNum); 
      ElementStructure.setGroup(1); 
      ElementStructure.setPeriod(1); 
      ElementStructure.setBlock("s"); 
      ElementStructure.setProton(atomicNum); 
     } else if (atomicNum == 2) { 
      ElementStructure.setName("Helium"); 
      ElementStructure.setSymbol("He"); 
      ElementStructure.setFamily("Noble gases"); 
      ElementStructure.setPhase("Gas"); 
      ElementStructure.setColor("Colorless"); 
      ElementStructure.setAtomicNum(atomicNum); 
      ElementStructure.setGroup(18); 
      ElementStructure.setPeriod(1); 
      ElementStructure.setBlock("s"); 
      ElementStructure.setProton(atomicNum); 
     } else if (atomicNum == 3) { 
      ElementStructure.setName("Lithium"); 
      ElementStructure.setSymbol("Li"); 
      ElementStructure.setFamily("Alkali metals"); 
      ElementStructure.setPhase("Solid"); 
      ElementStructure.setColor("Silvery white"); 
      ElementStructure.setAtomicNum(atomicNum); 
      ElementStructure.setGroup(1); 
      ElementStructure.setPeriod(2); 
      ElementStructure.setBlock("s"); 
     } 

     // Atoms must have equal number(s) of protons and electrons 
     ElementStructure.setElectron(ElementStructure.getProton()); 

     /* Legend: 
     * temp1-atomic weight rounded to nearest whole integer 
     * temp2-number of neutrons */ 
     //temp1 = (int)Math.round(ElementStructure.getWeight()); 
     temp1 = 100; //just a test value 
     temp2 = temp1 - ElementStructure.getProton(); 
     ElementStructure.setNeutron(temp2); 

     // Populate arrays 
     arrayAtomicNum.add(ElementStructure.getAtomicNum()); 
     arrayName.add(ElementStructure.getName()); 
     arraySymbol.add(ElementStructure.getSymbol()); 
     arrayFamily.add(ElementStructure.getFamily()); 
     arrayPhase.add(ElementStructure.getPhase()); 
     arrayColor.add(ElementStructure.getColor()); 
     arrayGroup.add(ElementStructure.getGroup()); 
     arrayPeriod.add(ElementStructure.getPeriod()); 
     arrayBlock.add(ElementStructure.getBlock()); 
     arrayProtons.add(ElementStructure.getProton()); 
     arrayNeutrons.add(ElementStructure.getNeutron()); 
     arrayElectrons.add(ElementStructure.getElectron()); 

     } //end while loop 


     viewPager = (ViewPager)findViewById(R.id.pager); 
     viewPager.setOffscreenPageLimit(3); 
     adapter = new ViewPagerAdapter(LearnActivity.this, arrayAtomicNum, arrayName, 
       arraySymbol, arrayFamily, arrayPhase, arrayColor, arrayGroup, arrayPeriod, 
       arrayBlock, arrayProtons, arrayNeutrons, arrayElectrons); 
     viewPager.setAdapter(adapter); 


    } 

} 

Все массивы имеют правильные значения, кажется, что у меня есть как социтировал все данные, которые я хочу правильно. Больше, но я стараюсь, чтобы этот пост был ограничен. В любом случае, , что вы думаете, вызывает ошибку ниже? Я знаю, что это происходит при попытке setText, но почему?

ответ

2

, если вы хотите установить целое число как текст в TextView вы должны использовать

textView.setText(String.valueOf(intValue)); 

если вы установите только значение TextView Int будет пытаться Acces ресурса с этим Int значением.

+0

Да! Вы, человек Эдди, вот почему я получил эту ошибку. Теперь все работает отлично! Я определенно буду помнить этот совет, теперь я знаю. – portfoliobuilder

+0

Добро пожаловать. – Eddy

Смежные вопросы