sim*_*ed. 975 android android-imageview android-fragments findviewbyid
我试图在片段中创建一个ImageView,它将引用我在片段的XML中创建的ImageView元素.但是,该findViewById方法仅在扩展Activity类时才有效.无论如何,我还可以在片段中使用它吗?
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);
}
}
Run Code Online (Sandbox Code Playgroud)
该findViewById方法有一个错误,表明该方法是未定义的.
adv*_*tej 1379
使用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);
Run Code Online (Sandbox Code Playgroud)
由于getView()只有在工作onCreateView(),你不能用它里面onCreate()或onCreateView()方法的片段.
Lef*_*nia 603
您需要膨胀片段的观点,并呼吁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;
}
Run Code Online (Sandbox Code Playgroud)
Ank*_*ary 126
在内部Fragment类中,您将获得onViewCreated()覆盖方法,您应始终初始化视图,因为在此方法中您可以使用视图对象来查找您的视图,如:
@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);
}
Run Code Online (Sandbox Code Playgroud)
永远记住,在Fragment的情况下,onViewCreated()如果返回null或super.onCreateView()从onCreateView()方法返回,则不会自动调用该方法.默认情况下将在案件被称为ListFragment是ListFragment返回FrameLayout默认.
注意:通过使用getView()一次onCreateView()成功执行,您可以在类中的任何位置获取片段视图.即
getView().findViewById("your view id");
Run Code Online (Sandbox Code Playgroud)
Mat*_*nko 66
我意识到这是一个古老的问题,但是流行的答案还有待改进.
问题不明确是什么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;
}
}
Run Code Online (Sandbox Code Playgroud)
xev*_*ent 45
首先获取片段视图,然后从此视图中获取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;
}
Run Code Online (Sandbox Code Playgroud)
小智 25
您也可以在onActivityCreated方法中执行此操作.
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
就像他们在这里一样:http ://developer.android.com/reference/android/app/Fragment.html (在API级别28中弃用)
getView().findViewById(R.id.foo);
Run Code Online (Sandbox Code Playgroud)
和
getActivity().findViewById(R.id.foo);
Run Code Online (Sandbox Code Playgroud)
是可能的.
dre*_*per 18
getView() 将给出根视图
View v = getView().findViewByID(R.id.x);
Run Code Online (Sandbox Code Playgroud)
Lez*_*Lez 17
您可以覆盖在所有视图被夸大后立即调用的onViewCreated().这是填写Fragment成员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);
}
}
Run Code Online (Sandbox Code Playgroud)
sag*_*its 15
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);
}
Run Code Online (Sandbox Code Playgroud)
pri*_*iti 11
1)首先膨胀Fragment的布局,然后你可以使用findviewbyId.
View view = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
return view;
Run Code Online (Sandbox Code Playgroud)
san*_*dhu 10
EditText name = (EditText) getView().findViewById(R.id.editText1);
EditText add = (EditText) getView().findViewById(R.id.editText2);
Run Code Online (Sandbox Code Playgroud)
小智 9
同意呼吁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;
}
Run Code Online (Sandbox Code Playgroud)
使用
imagebutton = (ImageButton) getActivity().findViewById(R.id.imagebutton1);
imageview = (ImageView) getActivity().findViewById(R.id.imageview1);
Run Code Online (Sandbox Code Playgroud)
它会工作
注意 :
从API级别26开始,您也不需要专门转换findViewById的结果,因为它使用其返回类型的推断.
所以现在你可以做到,
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;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
根据API级别11的文档
参考,在Back Stack 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;
}
Run Code Online (Sandbox Code Playgroud)
在Fragment类内部,您将获得onViewCreated()重写方法,在该方法中应始终初始化视图,因为在此方法中,您将获得view对象,通过该对象可以找到视图,例如:
class MyFragment extends Fragment {
private ImageView imageView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
return view;
}
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
试试这个对我有用
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);
}
}
Run Code Online (Sandbox Code Playgroud)
ImageView imageView;
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.testclassfragment, container, false);
imageView = view.findViewById(R.id.my_image);
return view;
}
Run Code Online (Sandbox Code Playgroud)
实现此目的的最佳方法如下:
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
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,rootView可以用于xml布局中定义的每个控件,并且代码更加清晰.
希望这可以帮助 :)
1)声明您的布局文件.
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState) {
return inflate(R.layout.myfragment, container, false);
}
Run Code Online (Sandbox Code Playgroud)
2)然后,获取您的视图的ID
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView nameView = (TextView) view.findViewById(R.id.textview1);
}
Run Code Online (Sandbox Code Playgroud)
尝试这个:
View v = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView img = (ImageView) v.findViewById(R.id.my_image);
return v;
Run Code Online (Sandbox Code Playgroud)
尝试
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
564499 次 |
| 最近记录: |