无法解析方法 'findViewById(int)'
Can not resolve method 'findViewById(int)'
我遇到了 findViewByid
的问题,但我找不到问题所在。
这是我的 FirstFragment
class 代码:
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()
方法。这在 Activity
或 View
中提供。在实现 Fragment
时,您不会在 onCreate()
中夸大您的视图(就像您通常在 Activity
中所做的那样),而是在 onCreateView()
中进行,并且您需要使用膨胀的根 View
在您膨胀的布局中找到 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()
有效。但是,这不是一个好的做法,因为该片段可能 在另一个 activity.
中重复使用
推荐的方法是定义一个接口。
接口应包含片段需要与其父级通信的方法activity。
public interface MyInterfcae {
void showTextView();
}
然后您的 activity 实现该接口。
public class MyActivity extends Activity implements MyInterfcae {
@Override
public void showTextView(){
findViewById(R.id.textview).setVisibility(View.VISIBLE);
}
}
在该片段中获取对界面的引用。
MyInterface mif = (MyInterface) getActivity();
调用方法。
mif.showTextView();
这样,片段和 activity 完全分离,每个实现该片段的 activity 都能够将该片段附加到自身。
我在Androidstudio学习中遇到了同样的问题,只是因为我创建的项目是Fragment
。选择 Blank Activity
没有 Fragment
会解决它。
我通过将 targetSdkVersion 从 23 更改为 21 找到了解决方案
在 findViewById()
方法之前添加 getView()
。
像这样:
getView().findViewById(R.id.potatoes);
这是解决问题的方法:
toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2);
我从 github 下载示例项目时遇到了这个问题。这个项目有
compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23
in Activity context
和 findViewById()
在 onCreate() 方法中为红色。所以我将以上版本更新为
compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25
错误得到解决。
getActivity().findViewById()
这有效它删除了 findviewby id 的红色并且它没有说无法解析符号但是当我在最后放置一个 colin 时整个语句带有下划线并且它说无法访问的语句。
barChart =(BarChart)getActivity().findViewById(R.id.barchart);
我也在片段中这样做。
我遇到了 findViewByid
的问题,但我找不到问题所在。
这是我的 FirstFragment
class 代码:
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()
方法。这在 Activity
或 View
中提供。在实现 Fragment
时,您不会在 onCreate()
中夸大您的视图(就像您通常在 Activity
中所做的那样),而是在 onCreateView()
中进行,并且您需要使用膨胀的根 View
在您膨胀的布局中找到 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()
有效。但是,这不是一个好的做法,因为该片段可能 在另一个 activity.
推荐的方法是定义一个接口。
接口应包含片段需要与其父级通信的方法activity。
public interface MyInterfcae { void showTextView(); }
然后您的 activity 实现该接口。
public class MyActivity extends Activity implements MyInterfcae { @Override public void showTextView(){ findViewById(R.id.textview).setVisibility(View.VISIBLE); } }
在该片段中获取对界面的引用。
MyInterface mif = (MyInterface) getActivity();
调用方法。
mif.showTextView();
这样,片段和 activity 完全分离,每个实现该片段的 activity 都能够将该片段附加到自身。
我在Androidstudio学习中遇到了同样的问题,只是因为我创建的项目是Fragment
。选择 Blank Activity
没有 Fragment
会解决它。
我通过将 targetSdkVersion 从 23 更改为 21 找到了解决方案
在 findViewById()
方法之前添加 getView()
。
像这样:
getView().findViewById(R.id.potatoes);
这是解决问题的方法:
toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2);
我从 github 下载示例项目时遇到了这个问题。这个项目有
compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23
in Activity context
和 findViewById()
在 onCreate() 方法中为红色。所以我将以上版本更新为
compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25
错误得到解决。
getActivity().findViewById() 这有效它删除了 findviewby id 的红色并且它没有说无法解析符号但是当我在最后放置一个 colin 时整个语句带有下划线并且它说无法访问的语句。 barChart =(BarChart)getActivity().findViewById(R.id.barchart); 我也在片段中这样做。