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.