Kan methode ‘findViewById(int)’ niet oplossen

Ik heb een probleem met findViewByidmaar ik kan niet vinden waar het probleem zit.

Hier is mijn FirstFragmentklascode:

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("https://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);
 }
}

Antwoord 1, autoriteit 100%

U moet dit doen in 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("https://www.google.com");
   return view;
}

Antwoord 2, autoriteit 77%

Fragmentbiedt niet de methodefindViewById(). Dit wordt geleverd in Activityof View. Wanneer u een Fragmentimplementeert, blaast u uw weergaven niet op in onCreate()(zoals u normaal doet in een Activity). In plaats daarvan doet u dat wel het in onCreateView()en je moet de opgeblazen root Viewgebruiken om de ID te vinden in de lay-out die je hebt opgeblazen.


Antwoord 3, autoriteit 14%

getActivity().findViewById()werkt. Dit is echter geen goede gewoonte omdat het fragment kan worden hergebruiktin een andere activiteit.

De aanbevolen manier hiervoor is om een interfacete definiëren.

  • De interface moet methoden bevatten waarmee het fragment moet communiceren met zijn bovenliggende activiteit.

    public interface MyInterfcae {
        void showTextView();
    }
    
  • Dan implementeert je activiteit die interface.

    public class MyActivity extends Activity implements MyInterfcae {
        @Override
        public void showTextView(){
            findViewById(R.id.textview).setVisibility(View.VISIBLE);
        }
    }
    
  • Pak in dat fragment een verwijzing naar de interface.

    MyInterface mif = (MyInterface) getActivity();
    
  • Een methode aanroepen.

    mif.showTextView();
    

Op deze manier zijn het fragment en de activiteit volledig ontkoppeld en kan elke activiteit die dat fragment implementeert, dat fragment aan zichzelf hechten.


Antwoord 4, autoriteit 2%

Ik had dit probleem toen ik een voorbeeldproject van github downloadde. Dit project had

compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23

in Activiteit contexten findViewById()waren in rode kleur binnen de methode onCreate(). Dus ik heb de bovenstaande versies bijgewerkt naar

compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25

en fout is opgelost.


Antwoord 5

Ik kom dezelfde vraag tegen bij het leren van Android-studio’s, alleen omdat ik het project maak met Fragment. Kies Blank Activityzonder dat Fragmentdit zou oplossen.


Antwoord 6

Ik heb een oplossing gevonden door targetSdkVersion te wijzigen van 23 in 21


Antwoord 7

Voeg getView()toe vóór de methode findViewById().

Zoals dit:

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


Antwoord 8

getActivity().findViewById()
Dit werkt, het verwijdert de rode kleur van findviewby id en er staat niet dat het symbool niet kan worden opgelost, maar als ik aan het einde een colin plaats, is de hele instructie onderstreept en staat er een onbereikbare instructie.
barChart =(BarChart)getActivity().findViewById(R.id.barchart);
Ik doe dit ook in fragment.


Antwoord 9

Zo kunt u het probleem oplossen:

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

Other episodes