Доступ к TextView.setText () в Viewpager из метода onResume () - PullRequest
1 голос
/ 01 ноября 2011

Я довольно новичок в разработке под Android, поэтому столкнулся с проблемой метода onResume ().

Мой код падает, когда я пытаюсь написать Name.setText () из метода onResume (),Написание TextView из метода onPause () работает на удивление без проблем.

Как я могу получить доступ к этому TextView из метода onResume ()?

public class Main extends Activity {

    private ViewPager awesomePager;
    private static int NUM_AWESOME_VIEWS = 2;
    private Context cxt;
    private AwesomePagerAdapter awesomeAdapter;
    View v;
    TextView Name;


    /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    cxt = this;

    awesomeAdapter = new AwesomePagerAdapter();
    awesomePager = (ViewPager) findViewById(R.id.awesomepager);
    awesomePager.setAdapter(awesomeAdapter);

}

@Override
protected void onResume() {
    super.onResume();
    Name.setText("1");

}

@Override
protected void onPause() {
    super.onPause();

}

private class AwesomePagerAdapter extends PagerAdapter{

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

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

                View v = new View(cxt.getApplicationContext());
                final LayoutInflater inflater = (LayoutInflater) cxt
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                switch (position) {

                case 0:

                    v = inflater.inflate(R.layout.subpage1, null, false);
                    Name = (TextView) v.findViewById(R.id.name);

                    break;

                case 1:

                    v = inflater.inflate(R.layout.subpage2, null, false);

                    break;

                default:

                    break;
                }

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

                return v;       

            }

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

            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return 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) {}             

}
}

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Прежде всего, в вашем коде вы не получаете ссылку на текстовое представление Name, поэтому вы должны получить исключение NullPointerException.

Если вы исправите это, оно должно работать IMO. Если это не так, сообщите нам имя полученного исключения.

1 голос
/ 01 ноября 2011

Name должно быть установлено на нуль ... Ваше приложение должно быть приостановлено, прежде чем оно когда-либо будет инициализировано.Просто убедитесь, что он инициализирован, прежде чем пытаться что-либо с ним сделать.Вы onResume() должны выглядеть так:

@Override
protected void onResume() {
  super.onResume();
  if(Name != null){
    Name.setText("1");
  }
}

PS Стандартное соглашение Java состоит в том, чтобы все имена переменных начинались со строчной буквы.Вам, вероятно, следует переименовать Name в name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...