Не удается разрешить метод ' 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);


 }
}

8 ответов


вам нужно сделать это в 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() (как вы обычно делаете в Activity.) Вместо этого вы делаете это в onCreateView() и вам нужно использовать надутый корень View чтобы найти идентификатор в макете, который вы надули.


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();
    

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


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


у меня была эта проблема, когда я загрузил образец проекта из github. Этот проект имел

compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23

в деятельности context и findViewById() были в красном цвете внутри метода onCreate (). Поэтому я обновил вышеуказанные версии до

compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25

и ошибки устранены.


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

такой:

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


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

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