Android 片段中的findViewById

Android 片段中的findViewById,android,android-fragments,android-imageview,findviewbyid,Android,Android Fragments,Android Imageview,Findviewbyid,我试图在片段中创建一个ImageView,该片段将引用我在XML中为片段创建的ImageView元素。但是,findViewById方法仅在扩展活动类时有效。还有什么我可以在片段中使用的吗 public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { I

我试图在片段中创建一个ImageView,该片段将引用我在XML中为片段创建的ImageView元素。但是,
findViewById
方法仅在扩展活动类时有效。还有什么我可以在片段中使用的吗

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
方法有一个错误,表明该方法未定义。

使用或执行
onViewCreated
方法中的View参数。它返回片段的根视图(由
onCreateView()
方法返回的根视图)
。有了它,您可以调用
findviewbyd()

由于
getView()
仅在
onCreateView()
之后工作,因此不能在片段的
onCreate()
onCreateView()方法中使用它。

使用或实现
onViewCreated
方法中的View参数。它返回片段的根视图(由
onCreateView()
方法返回的根视图)
。有了它,您可以调用
findviewbyd()


由于
getView()
只能在
onCreateView()
之后工作,因此不能在片段的
onCreate()
onCreateView()
方法中使用它。

需要膨胀片段的视图,并在它返回的
视图上调用
findViewById()

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;
}

您需要膨胀片段的视图,并在它返回的
视图上调用
findViewById()

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;
}

首先获取片段视图,然后从该视图获取您的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;
}

首先获取片段视图,然后从该视图获取您的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;
}

您可以覆盖onViewCreated(),该函数在所有视图膨胀后立即调用。这是填写片段的成员
视图
变量的正确位置。下面是一个例子:

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

您可以覆盖onViewCreated(),该函数在所有视图膨胀后立即调用。这是填写片段的成员
视图
变量的正确位置。下面是一个例子:

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

我意识到这是一个老生常谈的问题,但普遍的答案令人不满意

问题不清楚
imageView
需要什么-我们是将其作为视图传递回去,还是仅仅保存一个引用供以后使用

无论哪种方式,如果
ImageView
来自充气布局,正确的方法是:

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;
    }
}

我意识到这是一个老生常谈的问题,但普遍的答案令人不满意

问题不清楚
imageView
需要什么-我们是将其作为视图传递回去,还是仅仅保存一个引用供以后使用

无论哪种方式,如果
ImageView
来自充气布局,正确的方法是:

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;
    }
}

同意在视图上调用
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;
}

同意在视图上调用
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;
}

使用
getView()
返回片段的视图,然后可以调用
findViewById()
来访问片段视图中的任何视图元素。

使用
getView()
返回片段的视图,然后可以调用
findViewById()
访问片段视图中的任何视图元素。

您也可以在
onActivityCreated
方法中执行此操作

public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState);
}
就像这里一样:(在API级别28中不推荐)


都是可能的。

您也可以在创建的
onActivityCreated
方法中执行此操作

public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState);
}
就像这里一样:(在API级别28中不推荐)


是可能的。

Fragment
类中,您将获得override方法,在该方法中,您应该始终初始化视图,因为在此方法中,您可以获得视图对象,您可以使用该对象查找视图,如:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    view.findViewById(R.id.yourId).setOnClickListener(this);

    // or
    getActivity().findViewById(R.id.yourId).setOnClickListener(this);
}
请始终记住,在出现片段时,如果从
onCreateView()
方法返回null或
super.onCreateView()
,则不会自动调用
onViewCreated()
方法。 默认情况下,如果
ListFragment
作为
ListFragment
返回
FrameLayout
,则会调用它

注意:成功执行
onCreateView()
后,可以使用
getView()
在类中的任何位置获取片段视图。 i、 e


Fragment
类中,您将获得override方法,在该方法中,您应该始终初始化视图,因为在该方法中,您可以获得视图对象,使用该对象可以找到您的视图,如:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    view.findViewById(R.id.yourId).setOnClickListener(this);

    // or
    getActivity().findViewById(R.id.yourId).setOnClickListener(this);
}
请始终记住,在出现片段时,如果从
onCreateView()
方法返回null或
super.onCreateView()
,则不会自动调用
onViewCreated()
方法。 默认情况下,如果
ListFragment
作为
ListFragment
返回
FrameLayout
,则会调用它

注意:成功执行
onCreateView()
后,可以使用
getView()
在类中的任何位置获取片段视图。 i、 e

getView()方法不适用于OnCreate和类似方法之外的片段

有两种方法,将视图传递给oncreate上的函数(这意味着您只能在创建视图时运行函数),或者将视图设置为变量:

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);
}
getView()方法不适用于OnCreate和类似方法之外的片段

有两种方法,将视图传递给oncreate上的函数(这意味着您只能在创建视图时运行函数),或者将视图设置为变量:

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

您可以使用Activity对象调用
findViewById()
,进入片段中的
public void-onAttach(Activity-Activity)
方法

将活动保存到变量中,例如:

片段类中

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MyLayout myLayout = new MyLayout(inflater, container, false);
        myLayout.myImage.setImageResource(R.drawable.myImage);
        return myLayout.view;
    }
}
imagebutton = (ImageButton) getActivity().findViewById(R.id.imagebutton1);

imageview = (ImageView) getActivity().findViewById(R.id.imageview1);
LinearLayout ll = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView imageView = (ImageView)ll.findViewById(R.id.my_image);
return ll;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ImageView imageView = (ImageView) view.findViewById(R.id.imageview1);
}
public View onCreateView(LayoutInflater inflater,ViewGroup container, 
                                 Bundle savedInstanceState) {
    return inflate(R.layout.myfragment, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    TextView nameView = (TextView) view.findViewById(R.id.textview1);
}
View v = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView img = (ImageView) v.findViewById(R.id.my_image);

return v;
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
}}
private View myFragmentView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
myFragmentView = inflater.inflate(R.layout.myLayoutId, container, false);
myView = myFragmentView.findViewById(R.id.myIdTag)
return myFragmentView;
}
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);
    }
}
  class Demo extends Fragment
    {
        @Override
        public View onCreateView(final LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState)
        {
            View view =inflater.inflate(R.layout.demo_fragment, container,false);
            ImageView imageview=(ImageView)view.findViewById(R.id.imageview1);

            return view;
        }
    }
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;
    }
}
public View onCreateView(LayoutInflater inflater, 
                         ViewGroup container, 
                         Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.testclassfragment, container, false);
     ImageView imageView =  view.findViewById(R.id.my_image); //without casting the return type
     return view;
}
View view = inflater.inflate(R.layout.testclassfragment, container, false);
             ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
             return view;
class MyFragment extends Fragment {
    private ImageView imageView;

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

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        //initialize your view here for use view.findViewById("your view id")
        imageView = (ImageView) view.findViewById(R.id.my_image);
    }
}
private ImageView imageView;
@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        findViews(view);
    }
private void findViews(View v) {
    imageView = v.findViewById(R.id.img);
}