web-dev-qa-db-ja.com

メソッド '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);


 }
}
23
Ferhat

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;


}
35
Kristy Welsh

FragmentfindViewById()メソッドを提供しません。これはActivityまたはViewで提供されます。 Fragmentを実装するとき、onCreate()でビューを膨らませることはありません(通常Activityで行うように)。代わりに、onCreateView()で行います。そして、膨張したルートViewを使用して、膨張したレイアウト内のIDを見つける必要があります。

28
Larry Schiefer

getActivity().findViewById()は機能します。ただし、フラグメントは別のアクティビティで再利用になる可能性があるため、これは良い方法ではありません。

これに推奨される方法は、interfaceを定義することです。

  • インターフェイスには、フラグメントがその親アクティビティと通信するために必要なメソッドが含まれている必要があります。

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

このようにして、フラグメントとアクティビティは完全に分離され、そのフラグメントを実装するすべてのアクティビティは、そのフラグメントを自身にアタッチできます。

5
frogatto

Githubからサンプルプロジェクトをダウンロードしたときに、この問題が発生しました。このプロジェクトには

_compileSdkVersion 23
buildToolsVersion "23.0.0"
targetSdkVersion 23
_

アクティビティのcontextおよびfindViewById()は、onCreate()メソッド内で赤色でした。それで、上記のバージョンを

_compileSdkVersion 25
buildToolsVersion "25.0.3"
targetSdkVersion 25
_

エラーが解決されました。

1
Mohammed Farhan

プロジェクトをFragmentで作成したからといって、Androidスタジオ学習でも同じ質問に答えます。 FragmentなしでBlank Activityを選択すると解決します。

0
tokinonagare

TargetSdkVersionを23から21に変更して解決策を見つけました

0
swapnil saha