1147

フラグメントの XML で作成した ImageView 要素を参照するフラグメントに ImageView を作成しようとしています。ただし、このfindViewByIdメソッドは、Activity クラスを拡張した場合にのみ機能します。Fragmentでも使用できるものはありますか?

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ImageView imageView = (ImageView)findViewById(R.id.my_image);
        return inflater.inflate(R.layout.testclassfragment, container, false);
    }
}

メソッドには、findViewByIdメソッドが未定義であることを示すエラーがあります。

4

37 に答える 37

1548

メソッドの実装からgetView()または View パラメータを使用し ますonViewCreated。フラグメントのルート ビュー(メソッドによって返されるonCreateView()ビュー) を返します。これで を呼び出すことができますfindViewById()

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    ImageView imageView = (ImageView) getView().findViewById(R.id.foo);
    // or  (ImageView) view.findViewById(R.id.foo); 

getView()の後onCreateView()でのみ機能するため、フラグメントの内部onCreate()またはonCreateView()メソッドでは使用できません。

于 2011-06-27T16:34:19.647 に答える
650

フラグメントのビューを膨張させfindViewById()Viewそれが返す を呼び出す必要があります。

public View onCreateView(LayoutInflater inflater, 
                         ViewGroup container, 
                         Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.testclassfragment, container, false);
     ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
     return view;
}
于 2011-06-27T16:35:34.477 に答える
52

最初にフラグメント ビューを取得し、次にこのビューから ImageView を取得します。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.testclassfragment, container, false);
    ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
    return view;
}
于 2011-06-27T16:35:53.613 に答える
29

onActivityCreatedメソッドでそれを行うこともできます。

public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState);
}

ここで行うように: http://developer.android.com/reference/android/app/Fragment.html (API レベル 28 で非推奨)

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

getActivity().findViewById(R.id.foo);

可能です。

于 2013-10-09T23:22:03.160 に答える
18

すべてのビューが拡張された直後に呼び出されるonViewCreated()をオーバーライドできます。これは、フラグメントのメンバーView変数を入力するのに適した場所です。次に例を示します。

class GalleryFragment extends Fragment {
    private Gallery gallery;

    (...)

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        gallery = (Gallery) view.findViewById(R.id.gallery);
        gallery.setAdapter(adapter);
        super.onViewCreated(view, savedInstanceState);
    }
}
于 2012-03-28T15:58:13.650 に答える
16

メソッドgetView()は、OnCreate および同様のメソッド以外のフラグメントでは機能しません。

ビューを oncreate の関数に渡す (ビューが作成されているときにのみ関数を実行できることを意味します) か、ビューを変数として設定する 2 つの方法があります。

private View rootView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_contatos, container, false);
}

public void doSomething () {
    ImageView thumbnail = (ImageView) rootView.findViewById(R.id.someId);
}
于 2014-03-30T01:02:05.340 に答える
15

1)最初に Fragment のレイアウトを膨張させてから、 findviewbyId を使用できます。

View view = inflater.inflate(R.layout.testclassfragment, container, false);
             ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
             return view;
于 2018-01-30T09:51:02.660 に答える
10
EditText name = (EditText) getView().findViewById(R.id.editText1);
EditText add = (EditText) getView().findViewById(R.id.editText2);  
于 2014-12-20T13:03:01.603 に答える
10

ビューを呼び出すことに同意しfindViewById()ました。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View V = inflater.inflate(R.layout.testclassfragment, container, false);
    ImageView imageView = (ImageView) V.findViewById(R.id.my_image);

    return V;
}
于 2013-05-29T16:35:53.927 に答える
9

使用する

imagebutton = (ImageButton) getActivity().findViewById(R.id.imagebutton1);

imageview = (ImageView) getActivity().findViewById(R.id.imageview1);

それが動作します

于 2015-03-29T08:53:56.040 に答える
8

を使用getView()するとフラグメントのビューが返さfindViewById()れ、フラグメント ビュー内の任意のビュー要素にアクセスするために呼び出すことができます。

于 2013-07-11T11:55:08.077 に答える
8

これを試してみてください

public class TestClass extends Fragment {
    private ImageView imageView;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.testclassfragment, container, false);
        findViews(view);
        return view;
    }

    private void findViews(View view) {
        imageView = (ImageView) view.findViewById(R.id.my_image);
    }
}
于 2016-12-08T09:11:17.010 に答える
8

APIレベル11のドキュメントによると

参照、バックスタック http://developer.android.com/reference/android/app/Fragment.html

ショートコード

/**
 * The Fragment's UI is just a simple text view showing its
 * instance number.
 */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.hello_world, container, false);
    View tv = v.findViewById(R.id.text);
    ((TextView)tv).setText("Fragment #" + mNum);
    tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb));
    return v;
}
于 2014-10-13T02:02:18.077 に答える
5

これを実装する最良の方法は次のとおりです。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

rootView = inflater.inflate(R.layout.testclassfragment, container, false);
        ImageView imageView = (ImageView) rootView.findViewById(R.id.my_image);
        return rootView
}

このように、xml レイアウトで定義された各コントロールに rootView を使用することができ、コードはこの方法でより簡潔になります。

お役に立てれば :)

于 2014-08-28T12:11:27.550 に答える
4

これを試して:

View v = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView img = (ImageView) v.findViewById(R.id.my_image);

return v;
于 2016-04-29T04:51:11.013 に答える
3

onViewCreated というメソッドがもう 1 つあります。

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ImageView imageView = (ImageView) view.findViewById(R.id.imageview1);
}
于 2015-12-31T07:57:39.747 に答える
2

onCreateView メソッド内

1)最初に、追加したいレイアウト/ビューを膨らませる必要があります。LinearLayout

LinearLayout ll = inflater.inflate(R.layout.testclassfragment, container, false);

2) 次に、レイアウトから imageView id を見つけることができます

ImageView imageView = (ImageView)ll.findViewById(R.id.my_image);

3) 膨張したレイアウトを返す

return ll;
于 2015-12-06T18:46:30.717 に答える
2

ビューを膨らませる必要があります

public class TestClass extends Fragment {

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.testclassfragment, container, false);
    ImageView imageView = (ImageView)v.findViewById(R.id.my_image);
    return v
}}
于 2016-05-20T12:45:01.707 に答える