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

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

Вот мой FirstFragment класса 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); } } 

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

Solutions Collecting From Web of "Не может разрешить метод 'findViewById (int)'"

Вам нужно сделать это в 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; } 

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

getActivity().findViewById(...) должен работать. Но с точки зрения принципов разработки программного обеспечения это не очень хорошая практика.

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

  • Сначала вы должны определить интерфейс, который предоставляет некоторые точки доступа из вашей Activity для других вещей (например, фрагменты).

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

     public class MyActivity extends Activity implements MyInterfcae { } 
  • Внесите свою логику в этот метод.

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

     MyInterface mif = (MyInterface) getActivity(); 
  • Вызовите нужные вам методы.

     mif.showTextView(); 

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

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

Добавьте getView() перед findViewById() .

Как это:

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

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

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