Android 无法解析方法';findviewbyd(int)和#x27;

Android 无法解析方法';findviewbyd(int)和#x27;,android,findviewbyid,Android,Findviewbyid,我在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; impor

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


 }
}

Fragment
不提供
findViewById()
方法。这在
活动
视图
中提供。在实现
片段时
不会在
onCreate()
中膨胀视图(就像通常在
活动
中那样),而是在
onCreateView()中膨胀视图
并且您需要使用膨胀根
视图
在膨胀的布局中查找ID。

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


}
getActivity().findViewById()
有效。但是,这不是一个好的实践,因为片段可能会在另一个活动中重用

public interface MyInterfcae {
    void showTextView();
}
推荐的方法是定义一个接口

MyInterface mif = (MyInterface) getActivity();
  • 接口应该包含片段需要与其父活动通信的方法

    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
将解决此问题。

我通过将targetSdkVersion从23更改为21找到了解决方案在
findViewById()方法之前添加
getView()

像这样:


getView()

这是解决问题的方法:

toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);  
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2); 

我从github下载示例项目时遇到了这个问题。这个项目已经完成了

compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23
在Activity
context
findViewById()
中,onCreate()方法内部为红色。因此,我将上述版本更新为

compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25
错误已得到解决。

getActivity().findViewById() 这起作用了,它去掉了findviewby id的红色,它并没有说不能解析符号,但当我在最后加上一个colin时,整个语句都加了下划线,它说的是不可到达的语句。 barChart=(barChart)getActivity().findViewById(R.id.barChart);
我也在片段中这样做。

您的错误到底是什么?可能会问一个新问题?我用你的oncreateView替换了我的oncreateView,但它显示缺少返回语句,我添加了:
返回充气器。充气(R.layout.secondefragment,container,false)
但它会在手机的默认webbrowser上打开网页,感谢您的时间它仍然会在android默认浏览器中打开:/fixed it adding
mWebView.setWebViewClient(new WebViewClient()):)它似乎与您的初始问题无关。一个不起作用的问题。现在我也注意到我自己的getView()不起作用。请添加更多描述和/或关于你的答案的信息,以及它如何解决所问问题,以便其他人可以轻松理解,而无需要求澄清