Не удается разрешить метод ' 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
будет решить.
у меня была эта проблема, когда я загрузил образец проекта из github. Этот проект имел
compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23
в деятельности context
и findViewById()
были в красном цвете внутри метода onCreate (). Поэтому я обновил вышеуказанные версии до
compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25
и ошибки устранены.
Это, как вы можете решить проблему:
toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2);