getView () возвращает ноль во втором действии - PullRequest
2 голосов
/ 05 марта 2019

У меня есть приложение, которое создает пакет и передает его во второе действие, чтобы данные в пакете использовались позже.

Пока что я просто хочу отобразить один из элементов в наборе в TextView, чтобы быть уверенным, что я могу обрабатывать данные во втором задании. Я звоню getView().findViewByID(R.id.theTextViewIWant), но он всегда возвращает null, и IDE говорит, что не может решить getView(). Я полагаю, что это что-то, чего я не совсем понимаю в View, который содержит второе действие, поэтому я был бы признателен за любую помощь.

public class MyClass extends AppCompatActivity {

    private SectionsPagerAdapter mSectionsPagerAdapter;

    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mark_student);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);
    }

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

        Bundle receivedInfo = getIntent().getExtras();
        String unitSelected = receivedInfo.getString("key");

        TextView textViewBox = (TextView) getView().findViewById(R.id.textView2);
        textViewBox.setText(unitSelected);
    }

Я пробовал эти два других способа получения объекта просмотра, но они тоже не сработали:

ViewGroup rootView = (ViewGroup) ((ViewGroup) this.findViewById(android.R.id.content)).getChildAt(0); //nope

View fragmentView = getView(); //neither

Ответы [ 3 ]

1 голос
/ 05 марта 2019

Я вызываю getView (). FindViewByID (R.id.theTextViewIWant), но он всегда возвращает значение NULL, а в среде IDE не удается разрешить getView ()

IРекомендуем вам прочитать getView() документацию по методу, но есть небольшое объяснение

Получить представление, отображающее данные в указанной позиции в наборе данных.

Поэтому, если вы хотите найти представление, которое не входит в набор данных, например, в вашем примере TextView, тогда вы хотите использовать findViewById(int)

Находит представление, которое было идентифицировано атрибутом XML android: id, который был обработан в onCreate (Bundle).

Как сказано в документации, я рекомендую вам поставить его на *Метод 1024 * вместо onStart().

Затем вы должны удалить getView() и сделать это следующим образом:

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.yourLayoutFromActivity2);
  TextView textViewBox = (TextView) findViewById(R.id.textView2);
}

Примечание: если вы положили свои вещи в onStart()это означает, что каждый раз, когда приложение приходит с переднего плана, будет выполнять все, что у вас есть внутри.Я также рекомендую вам взглянуть на Android life cycle

1 голос
/ 05 марта 2019

IDE говорит вам, что getView() - это не метод Activity (однако это метод Fragment).В Activity вы можете просто позвонить findViewById().

TextView textViewBox = (TextView) findViewById(R.id.textView2);
0 голосов
/ 05 марта 2019

getView () является методом фрагмента. Вам нужно использовать findViewById () в действии, чтобы инициализировать представление. Также переместите код инициализации в метод onCreate и также обработайте намерение.

...