studio renderizado problemas muestra formulario error diseño con android findviewbyid

android - renderizado - No se puede resolver el método ''findViewById(int)''



problemas con android studio (9)

Estoy teniendo problemas con findViewByid pero no puedo encontrar dónde está el problema.

Aquí está mi código de clase 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); } }


Agregue getView() antes del método findViewById() .

Me gusta esto:

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


Así es como puedes resolver el problema:

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


Encontré la solución cambiando targetSdkVersion de 23 a 21


Me encuentro con la misma pregunta en el estudio de Android, solo porque creo el proyecto de Fragment . Elegir Blank Activity sin Fragment lo resolvería.


Necesitas hacer esto en 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; }


Tuve este problema cuando descargué un proyecto de muestra de github. Este proyecto tuvo

compileSdkVersion 23 buildToolsVersion "23.0.0" targetSdkVersion 23

en el context actividad y findViewById() estaban en color rojo dentro del método onCreate (). Así que actualicé las versiones anteriores a

compileSdkVersion 25 buildToolsVersion "25.0.3" targetSdkVersion 25

y el error se resolvió.


getActivity (). findViewById () Esto funciona, elimina el color rojo de findviewby id y no dice que no se pueda resolver el símbolo, pero cuando coloco una columna al final, toda la declaración está subrayada y dice una declaración inalcanzable. barChart = (BarChart) getActivity (). findViewById (R.id.barchart); También estoy haciendo esto en fragmento.


Fragment no proporciona el método findViewById() . Esto se proporciona en Activity o View . Cuando implementas un Fragment , no onCreate() tus vistas en onCreate() (como lo haces normalmente en una Activity ). En cambio, lo haces en onCreateView() y necesitas usar la View raíz inflada para encontrar la ID dentro del diseño tu inflaste


getActivity().findViewById() funciona. Sin embargo, esto no es una buena práctica porque el fragmento puede reutilizarse en otra actividad.

La forma recomendada para esto es definir una interfaz .

  • La interfaz debe contener métodos por los cuales el fragmento necesita comunicarse con su actividad principal.

    public interface MyInterfcae { void showTextView(); }

  • Entonces tu actividad implementa esa interfaz.

    public class MyActivity extends Activity implements MyInterfcae { @Override public void showTextView(){ findViewById(R.id.textview).setVisibility(View.VISIBLE); } }

  • En ese fragmento toma una referencia a la interfaz.

    MyInterface mif = (MyInterface) getActivity();

  • Llama a un método.

    mif.showTextView();

De esta manera, el fragmento y la actividad están totalmente desacoplados y cada actividad que implementa ese fragmento puede adjuntar ese fragmento a sí mismo.