Подтвердить что ты не робот

Не может разрешить метод 'findViewById (int)'

У меня проблемы с findViewByid, но я не могу найти, где проблема.

Здесь мой код класса FirstFragment:

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;

import java.util.ArrayList;
import java.util.List;


public class FirstFragment extends Fragment {
public static final String TAG = "first";

private WebView mWebView;
ProgressBar progressBar;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    mWebView = (WebView) findViewById(R.id.activity_main_webview);

    progressBar = (ProgressBar) findViewById(R.id.progressBar1);

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    mWebView.loadUrl("http://www.google.com");
 }

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.secondefragment, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);


}
}

Любая помощь будет оценена.

4b9b3361

Ответ 1

Вам нужно сделать это в onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle   savedInstanceState) {
   View view =  inflater.inflate(R.layout.secondefragment, container, false);
    mWebView = (WebView) view.findViewById(R.id.activity_main_webview);
   progressBar = (ProgressBar) view.findViewById(R.id.progressBar1);

   WebSettings webSettings = mWebView.getSettings();
   webSettings.setJavaScriptEnabled(true);
   mWebView.loadUrl("http://www.google.com");

   return view;


}

Ответ 2

Fragment не предоставляет метод findViewById(). Это предусмотрено в Activity или View. При реализации Fragment вы не раздуваете свои представления в onCreate() (как обычно, в Activity.) Вместо этого вы делаете это в onCreateView(), и вам нужно использовать завышенный корень View для найдите идентификатор в раздутом, который вы надули.

Ответ 3

getActivity().findViewById() работает. Однако это не является хорошей практикой, потому что фрагмент может быть повторно использован в другой деятельности.

Рекомендуемым способом для этого является определение интерфейса.

  • Интерфейс должен содержать методы, с помощью которых фрагмент должен взаимодействовать со своей родительской активностью.

    public interface MyInterfcae {
        void showTextView();
    }
    
  • Затем ваша деятельность реализует этот интерфейс.

    public class MyActivity extends Activity implements MyInterfcae {
        @Override
        public void showTextView(){
            findViewById(R.id.textview).setVisibility(View.VISIBLE);
        }
    }
    
  • В этом фрагменте возьмите ссылку на интерфейс.

    MyInterface mif = (MyInterface) getActivity();
    
  • Вызвать метод.

    mif.showTextView();
    

Таким образом, фрагмент и активность полностью развязаны, и каждая деятельность, которая реализует этот фрагмент, может прикрепить этот фрагмент к себе.

Ответ 4

Я встречаюсь с тем же вопросом в обучении студии Android, только потому, что создаю проект Fragment. Выберите Blank Activity без Fragment, чтобы решить проблему.

Ответ 5

Я нашел решение, изменив targetSdkVersion с 23 до 21

Ответ 6

Добавить getView() до findViewById().

Вот так:

getView().findViewById(R.id.potatoes);

Ответ 7

Вот как вы можете решить проблему:

toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);  
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2);