无法解析方法'findViewById(int)'

问题描述 投票:21回答:9

我在使用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);


 }
}
android findviewbyid
9个回答
33
投票

您需要在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;


}

26
投票

Fragment不提供findViewById()方法。这在ActivityView中提供。在实施Fragment时,你不会在onCreate()中膨胀你的观点(就像你通常在Activity中那样。)相反,你在onCreateView()中这样做,你需要使用膨胀的根View在你膨胀的布局中找到ID。


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();

这样,片段和活动完全解耦,并且实现该片段的每个活动都能够将该片段附加到自身。


0
投票

我在Android工作室学习中遇到了同样的问题,因为我是通过Fragment创建项目的。选择没有Blank ActivityFragment会解决它。


0
投票

我通过将targetSdkVersion从23改为21来找到解决方案


0
投票

当我从github下载示例项目时,我遇到了这个问题。这个项目有

compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23

在活动中,contextfindViewById()在onCreate()方法中是红色的。所以我将以上版本更新为

compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25

和错误得到解决。


-1
投票

getView()方法之前添加findViewById()

像这样:

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


-1
投票

getActivity()。findViewById()这有效地删除了findviewby id的红色,它并没有说无法解析符号,但是当我把一个colin放到最后时,整个语句都加下划线并且它表示无法访问的语句。 barChart =(BarChart)getActivity()。findViewById(R.id.barchart);我也在碎片中这样做。


-2
投票

这是你如何解决问题:

toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);  
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2); 
© www.soinside.com 2019 - 2024. All rights reserved.