Не может разрешить метод '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);
}
}
Любая помощь будет оценена.
Ответы
Ответ 1
Вам нужно сделать это в 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;
}
Ответ 2
Fragment
не предоставляет метод findViewById()
. Это предусмотрено в Activity
или View
. При реализации Fragment
вы не раздуваете свои представления в onCreate()
(как обычно, в Activity
.) Вместо этого вы делаете это в onCreateView()
, и вам нужно использовать завышенный корень View
для найдите идентификатор в раздутом, который вы надули.
Ответ 3
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();
Таким образом, фрагмент и активность полностью развязаны, и каждая деятельность, которая реализует этот фрагмент, может прикрепить этот фрагмент к себе.
Ответ 4
Я встречаюсь с тем же вопросом в обучении студии Android, только потому, что создаю проект Fragment
. Выберите Blank Activity
без Fragment
, чтобы решить проблему.
Ответ 5
Я нашел решение, изменив targetSdkVersion с 23 до 21
Ответ 6
Добавить getView()
до findViewById()
.
Вот так:
getView().findViewById(R.id.potatoes);
Ответ 7
Вот как вы можете решить проблему:
toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2);