我遇到了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);
}
}
答案 0 :(得分:34)
您需要在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;
}
答案 1 :(得分:26)
Fragment
没有提供findViewById()
方法。这在Activity
或View
中提供。在实施Fragment
时,您不会在onCreate()
中夸大您的观看次数(就像通常在Activity
中一样。)相反,您可以在onCreateView()
和View
中进行观看。需要使用膨胀的根[1<<31, 1<<32)
来查找您膨胀的布局中的ID。
答案 2 :(得分:5)
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();
这样,片段和活动完全解耦,并且实现该片段的每个活动都能够将该片段附加到自身。
答案 3 :(得分:1)
当我从github下载示例项目时遇到了这个问题。这个项目有
compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23
活动context
和findViewById()
中的在onCreate()方法内为红色。因此,我将上述版本更新为
compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25
错误已解决。
答案 4 :(得分:0)
我在Android工作室学习中遇到了同样的问题,因为我是通过Fragment
创建项目的。选择Blank Activity
,但没有Fragment
可以解决它。
答案 5 :(得分:0)
我通过将targetSdkVersion从23改为21来找到解决方案
答案 6 :(得分:-1)
在getView()
方法之前添加findViewById()
。
像这样:
getView().findViewById(R.id.potatoes);
答案 7 :(得分:-1)
getActivity()。findViewById() 这项工作可以消除findviewby id的红色,并且不会说无法解析符号,但是当我在最后放置colin时,整个语句都带有下划线,并且表示无法访问。 barChart =(BarChart)getActivity()。findViewById(R.id.barchart); 我也正在分段执行此操作。
答案 8 :(得分:-2)
这就是解决问题的方法:
toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2);