Android   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了子类SurfaceView中的findViewById引发RuntimeException大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如果将findViewById调用移到Activity中,则此代码可以正常工作.关于为什么它不能从LearningView类内部使用的任何提示?我尝试将TextView移到com.example.LearningView标记内,但没有任何乐趣.我更希望从SurfaceView子类中获取TextView,因为我认为将电视视为SV的“子级”更为合理.

这是我为弄清楚较大应用程序中的问题而编写的一个示例,但其要旨是相同的,并且堆栈跟踪基本上相同.

出于其价值,findViewById调用返回的是null,这显然在某些尝试解决此问题的过程中引发了NullPointerExceptions.

从我的尝试中您@R_717_9381@,我对此一无所知.

Learning.java

package com.example.Learning;

import android.app.Activity;
import android.os.bundle;

public class Learning extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);
        setContentView(R.layout.main);
    }
}

LearningView.java:

package com.example.Learning;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;

public class LearningView extends SurfaceView implements SurfaceHolder.CallBACk {
    public LearningView(Context context, AttributeSet atts) {
        super(context, atts);
        getHolder().addCallBACk(this);      
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        TextView t = (TextView) findViewById(R.id.contents);
        t.setText("tesTing");
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }
}
@H_219_0@main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://scheR_379_11845@as.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <com.example.Learning.LearningView
        android:id="@+id/learningview" android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <TextView android:id="@+id/contents" android:layout_gravity="bottom|left"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:textColor="#ffffffff" />
</FrameLayout>

堆栈跟踪:

Thread [<3> main] (Suspended (exception RuntimeException))  
    ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2454  
    ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2470   
    ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119 
    ActivityThread$H.handlemessage(messagE) line: 1821  
    ActivityThread$H(Handler).dispatchmessage(messagE) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4310    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, Boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 521  
    ZygoteInit$MethodAndArgsCaller.run() line: 860  
    ZygoteInit.main(String[]) line: 618 
    NativeStart.main(String[]) line: not available [native method]  

解决方法:

您崩溃是因为在findViewById()之后,您的TextView为null. TextView不是SurfaceView的子级,因此以SurfaceView为起​​点调用findViewById()不会找到它.

大佬总结

以上是大佬教程为你收集整理的子类SurfaceView中的findViewById引发RuntimeException全部内容,希望文章能够帮你解决子类SurfaceView中的findViewById引发RuntimeException所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: