【问题标题】:Why doesnt ImageView work for me? Android为什么 ImageView 不适合我?安卓
【发布时间】:2016-01-30 16:55:35
【问题描述】:

我的代码如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //landscape
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        setContentView(R.layout.activity_game);

        //initialize arks
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                initializeArks();
            }
        }, 2000);
    }

没什么特别的,这里是initializeArks():

    public void initializeArks(){
        iv= (ImageView) findViewById(R.id.imageView);
        tw= (TypeWriter) findViewById(R.id.textView);
CountDownTimer timer = new CountDownTimer(10, 1000) {

            public void onTick(long millisUntilFinished) {

            }

            public void onFinish() {
                iv.setImageResource(R.drawable.loading);
            }
        }.start();

    }

请记住,此代码仅用于调试,它没有做任何具体的事情,但我发现问题出在 ImageView

我还声明了我的变量 STATIC 以便在我的其他类中使用它们:

    public static ImageView iv;
    public static TypeWriter tw;

我的 XML 是基本的:

<ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

如果有人向我解释为什么这不起作用,或者会给我发送一个工作代码 sn-p 供我仅用于一个目的:显示图像,我将不胜感激。

一旦我在手机上安装应用程序并打开它,我会等待 4 秒(这就是我上面的代码延迟它的时间)然后它就崩溃了

【问题讨论】:

  • 不要为视图类型创建静态变量,因为这会导致内存泄漏,因为视图持有对您的活动对象的引用。
  • 你到底想做什么???
  • doesnt work 是什么意思?请发布您的日志。
  • 您应该正确描述您的问题,而不仅仅是粘贴您的代码。另外,尝试为您的图像视图设置一个固定的高度/宽度,或在您的 xml 中设置 adjustViewBounds="true"

标签: java android view static imageview


【解决方案1】:

我认为你应该执行这条线

iv.setImageResource(R.drawable.loading);

在 UI 标题内。 Look at this answer

【讨论】:

    【解决方案2】:

    onCreate() 方法中而不是在initializeArks() 方法中初始化您的图像视图,并且不要将它们声明为静态,如下所示:

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //landscape
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            setContentView(R.layout.activity_game);
    
            iv= (ImageView) findViewById(R.id.imageView); //<==== initialise in onCreate
            tw= (TypeWriter) findViewById(R.id.textView);
    
            //initialize arks
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    initializeArks();
                }
            }, 2000);
        }
    

    并将变量声明为

    public ImageView iv;
    public TypeWriter tw;
    

    【讨论】:

      【解决方案3】:

      我找不到实现我想要的方法,所以我从大局来看,我的场景让我没有 ImageView。幸运的是,更改布局背景对我有用,并且对我的项目没有任何负面影响。感谢您在这里浪费时间

      【讨论】:

        【解决方案4】:

        您似乎没有在 UI 线程上运行。 尝试像这样在你的线程中运行:

        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                initializeArks();
                            }
                        });
        

        【讨论】:

          猜你喜欢
          • 2014-01-03
          • 2011-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-03
          相关资源
          最近更新 更多