Bala Milka Ответов: 1

Я не знаю, в чем проблема.но он показывает мне " cannont resolve method 'findviewbyid(int)'". вот мой код, скажите мне, как это исправить


package com.example.afinal;

import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.widget.TextView;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * Created by admin on 13/07/2017.
 */

public class Tab1 extends Fragment {
    TextView textView;
    TextView label1;
    String  strDate;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/dd/MM");

        Date day = new Date();
        strDate=sdf.format(new Date(day.getTime() - TimeUnit.DAYS.toMillis(1)));
        textView =(TextView)findViewById(R.id.textView);
        textView.setText(strDate);
        return inflater.inflate(R.layout.tab1,container,false);

        //  textView.setText(new Date().toString());
    }
}


Что я уже пробовал:

Я попытался использовать метод getView () перед findviewById (int).Мое приложение разбилось после использования этого метода.Я новичок в android.Помогите мне, ребята.

1 Ответов

Рейтинг:
6

Afzaal Ahmad Zeeshan

Здесь нужно понять несколько вещей, прежде всего вы используете findViewById, но в Fragment производный класс, во-вторых, вы используете его в onCreateView() функция. Они не разрешены, и вам нужно подождать и вызвать его из более поздней функции (любого другого обработчика). Быстрый взлом (и плохая практика) состоял бы в том, чтобы думать, что вы можете просто раздуть новый вид и захватить объекты оттуда, просто не делайте этого.

Лучшим подходом было бы назвать его любой другой функцией, например onStart() функция или любая другая функция, которая выполняется, когда ваше представление отображается пользователю. Это не будет плохой практикой, чтобы показать" загрузку... " пользователю.

public void onStart() {
    super.onStart(); // Call this here. 
    // Get it here.
    TextView textView = (TextView) getView().findViewById(R.id.textView);
}

Обратите внимание на тот факт, что функция onViewCreated() никогда не гарантированно вызывается, поэтому эта функция была бы полезна. Для получения дополнительной информации вам следует рассмотреть возможность прочтения Fragment[^] ссылка на класс, чтобы понять, как вызываются функции — вызываются события.

android-findViewById во фрагменте-переполнение стека[^]


Bala Milka

Спасибо за быстрый ответ, Ахмад.Я попробовал метод, предложенный вами.Но это не очень хорошо работает.Не могли бы вы предложить какой-нибудь другой метод ?

Afzaal Ahmad Zeeshan

Какую ошибку вы получаете? Может быть, ошибка поможет нам отладить эту вашу проблему.

Bala Milka

"приведение getView.findViewById(R. Id. textView) в TextView является reduntant" это ошибка, которую я получил.

Afzaal Ahmad Zeeshan

Это всего лишь предупреждение, вы можете просто снять гипс и попробовать еще раз. Снять (TextView) ... расстаньтесь и сделайте это снова.

Bala Milka

а также я получил ошибку на "onStart", и она показывает мне,что " переопределяющий метод должен вызывать super. onStart"

Afzaal Ahmad Zeeshan

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

Bala Milka

Наконец моя 1-недельная борьба подошла к концу.Твоих братанов.Дорогуша у много.и спасибо sooooooooooooooooooooooooooooo.

Afzaal Ahmad Zeeshan

Мы вам более чем рады. :-)