Android开发,怎么在activity中获取fragment中的imageview

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发,怎么在activity中获取fragment中的imageview相关的知识,希望对你有一定的参考价值。

可以通过activity将intent里面的数据传给fragment(例如setArguments),fragment可以通过getArguments来获取。 参考技术A 在一个ACTIVITY (CXmain) 中包含N个Fragment.现在在其中一个Fragment中需要动态创建imageview 但是运行时却出错.
目的是在在Fragment中创建一个可以滑动显示图片的功能 利用ScrollView来实现.下面是代码:

Android扩展-怎么在Activity中拿到一个View的宽和高

今天来简单的介绍一下怎么在Activity中拿到View的width和height。有人可能会疑问,这个有什么难的,我们直接可以在Activity生命周期函数里面获取width和height。看似简单,实际上在onCreate、onStart、onResume中均无法获取正确的width和height,这是因为View的measure过程和Activity的生命周期方法不是同步的,因此无法保证Activity执行了onCreate、onStart、onResume时,某个View已经测量完毕,如果View还没有测量完毕的话,那么获得的宽和高就是0.那么有什么方法来正确的获取呢?

1.onWindowFoucusChanged

 1 public class MainActivity extends AppCompatActivity {
 2 
 3     private Button mButton = null;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9 
10         mButton = (Button) findViewById(R.id.id_button);
11 
12     }
13 
14     @Override
15     public void onWindowFocusChanged(boolean hasFocus) {
16         super.onWindowFocusChanged(hasFocus);
17         if (hasFocus) {
18             int width = mButton.getMeasuredWidth();
19             int height = mButton.getMeasuredHeight();
20             Log.i("main", "width = " + width + " height = " + height);
21         }
22     }
23 }

  onWindowFocusChanged这个方法的定义是:View已经初始化完毕了,width和height已经准备好了,这个时候去获取width和height是没有问题的。需要注意的是:onWindowFocusChanged会调用多次,当Activity的窗口得到焦点和失去焦点时均会被调用一次。具体来说,当Activity继续执行和暂停执行时,onWindowFocusChanged均会被调用,如果频繁的进行onResume和onPause,那么onWindowFocusChanged也会被频繁的调用。

 2.view.post(Runnable)

 1 public class MainActivity extends AppCompatActivity {
 2 
 3     private Button mButton = null;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9 
10         mButton = (Button) findViewById(R.id.id_button);
11         mButton.post(new Runnable() {
12             @Override
13             public void run() {
14                 int width = mButton.getMeasuredWidth();
15                 int height = mButton.getMeasuredHeight();
16                 Log.i("main", "width = " + width + " height = " + height);
17             }
18         });
19     }
20 
21 }

  我们可以通过post方法将一个runnable对象投递到mButton的消息队列的尾部,然后等待Looper调用此runnable的时候,View已经初始化好了。

 3.ViewTreeObserver

 1 public class MainActivity extends AppCompatActivity {
 2 
 3     private Button mButton = null;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9 
10         mButton = (Button) findViewById(R.id.id_button);
11     }
12 
13     @Override
14     protected void onStart() {
15         super.onStart();
16         ViewTreeObserver viewTreeObserver = mButton.getViewTreeObserver();
17         viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
18             @Override
19             public void onGlobalLayout() {
20                 mButton.getViewTreeObserver().removeOnGlobalLayoutListener(this);
21                 int width = mButton.getMeasuredWidth();
22                 int height = mButton.getMeasuredHeight();
23             }
24         });
25     }
26 }

  使用ViewTreeObsrever的众多回调可以完成这个功能,比如使用OnGlobalLayoutListener这个接口,当View树的状态发生改变或者View内部的View的可见性发生改变时,onGlobalLayout方法将被回调,因此这是获取View的width和height一个很好的时机。需要注意的是,伴随着View树的状态改变等等,onGlobalLayout会被调用多次。

以上是关于Android开发,怎么在activity中获取fragment中的imageview的主要内容,如果未能解决你的问题,请参考以下文章

android怎么从一个activity获取另一个activity的信息

android开发 修改了数据库后怎么更新

Android开发 怎么返回上上个activity

android开发问题:如何在当前Acitivity中用代码获取上一个Activity名称?

Android 怎么退出整个应用程序

Android开发系列Activity与Fragment获取屏幕获取屏幕像素的不同方式