web-dev-qa-db-fra.com

Impossible de résoudre la méthode 'findViewById (int)'

J'ai un problème avec findViewByid mais je ne trouve pas où est le problème.

Voici mon code de classe 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);


 }
}
20
Ferhat

Vous devez le faire dans 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;


}
33
Kristy Welsh

Fragment ne fournit pas la méthode findViewById(). Ceci est fourni dans Activity ou View. Lorsque vous implémentez une Fragment, vous ne gonflez pas vos vues dans onCreate() (comme vous le faites normalement dans Activity.) À la place, vous le faites dans onCreateView() et vous devez utiliser la racine View gonflée pour trouver l'ID dans la présentation gonflée.

26
Larry Schiefer

getActivity().findViewById() fonctionne. Cependant, ce n'est pas une bonne pratique car le fragment peut être réutilisé dans une autre activité.

Pour ce faire, il est recommandé de définir une interface .

  • L'interface doit contenir des méthodes permettant au fragment de communiquer avec son activité parent.

    public interface MyInterfcae {
        void showTextView();
    }
    
  • Ensuite, votre activité implémente cette interface.

    public class MyActivity extends Activity implements MyInterfcae {
        @Override
        public void showTextView(){
            findViewById(R.id.textview).setVisibility(View.VISIBLE);
        }
    }
    
  • Dans ce fragment, saisissez une référence à l'interface.

    MyInterface mif = (MyInterface) getActivity();
    
  • Appelez une méthode.

    mif.showTextView();
    

De cette façon, le fragment et l'activité sont complètement découplés et chaque activité mettant en œuvre ce fragment est capable d'attacher ce fragment à lui-même. 

4
Hi I'm Frogatto

J'ai eu ce problème lorsque j'ai téléchargé un exemple de projet à partir de github. Ce projet avait 

compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23

dans l'activité context et findViewById() étaient en rouge dans la méthode onCreate (). J'ai donc mis à jour les versions ci-dessus pour 

compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25

et l'erreur a été résolue.

0
Mohammed Farhan

Je rencontre la même question dans l'apprentissage en studio Android, simplement parce que je crée le projet par Fragment. Choisissez Blank Activity sans Fragment le résoudre.

0
tokinonagare

J'ai trouvé une solution en changeant targetSdkVersion de 23 à 21

0
swapnil saha