视图在setText上为null

fregos23

我有一个自定义ViewGroup,它在View构造函数调用TextView text1init()方法中实例化一个private

NullPointerException尝试setText(...)在335行上得到提示,即使我之前特别检查它是否不为null:

//also tried instantiating here with text1 = new TextView(this.getContext());
private TextView text1;


public SlidingTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();//line 65
    }

private void init() {
   ...
   //instantiate here 
   text1 = new TextView(this.getContext());

   //other setters on text1
   text1.setTextSize(fontSize);
   text1.setTextColor(Color.WHITE);
   text1.setPadding(textPadding, 0, textPadding, 0);
   text1.setGravity(Gravity.CENTER);
   text1.setWidth(textWidth);
   text1.setMaxLines(1);
   text1.setEllipsize(TextUtils.TruncateAt.END);
   text1.setMaxWidth(textWidth);
   text1.setBackgroundColor(Color.TRANSPARENT);
   text1.measure(0, textHeight);

   // Logs: android.widget.TextView@41b04b60 false
   Log.d("", text1.toString() + " " + (text1 == null));
   // Throws NullPointerException
   text1.setText("Text");//Line 335
...
}

这是logcat:

07-23 12:51:11.433: E/AndroidRuntime(31419): FATAL EXCEPTION: main
07-23 12:51:11.433: E/AndroidRuntime(31419): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.MainActivity}: android.view.InflateException: Binary XML file line #71: Error inflating class com.example.app.SlidingTextView
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.os.Looper.loop(Looper.java:137)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.ActivityThread.main(ActivityThread.java:4921)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at java.lang.reflect.Method.invokeNative(Native Method)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at java.lang.reflect.Method.invoke(Method.java:511)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at dalvik.system.NativeStart.main(Native Method)
07-23 12:51:11.433: E/AndroidRuntime(31419): Caused by: android.view.InflateException: Binary XML file line #71: Error inflating class com.example.app.SlidingTextView
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:313)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.Activity.setContentView(Activity.java:1924)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at com.example.app.MainActivity.onCreate(MainActivity.java:101)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.Activity.performCreate(Activity.java:5206)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
07-23 12:51:11.433: E/AndroidRuntime(31419):    ... 11 more
07-23 12:51:11.433: E/AndroidRuntime(31419): Caused by: java.lang.reflect.InvocationTargetException
07-23 12:51:11.433: E/AndroidRuntime(31419):    at java.lang.reflect.Constructor.constructNative(Native Method)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
07-23 12:51:11.433: E/AndroidRuntime(31419):    ... 22 more
07-23 12:51:11.433: E/AndroidRuntime(31419): Caused by: java.lang.NullPointerException
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.widget.TextView.checkForRelayout(TextView.java:6600)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.widget.TextView.setText(TextView.java:3732)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.widget.TextView.setText(TextView.java:3590)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at android.widget.TextView.setText(TextView.java:3565)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at com.example.app.SlidingTextView.init(SlidingTextView.java:335)
07-23 12:51:11.433: E/AndroidRuntime(31419):    at com.example.app.SlidingTextView.<init>(SlidingTextView.java:65)
07-23 12:51:11.433: E/AndroidRuntime(31419):    ... 25 more

任何想法可能是什么原因?

UPDATE1:

textWidth=500;
textHeight=0;
textPadding=10;
fontSize=30;

设置前检查所有变量和值setText(),不为null并返回正确的值

UPDATE2: main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background_gradient"
    tools:context="com.example.app.MainActivity" >
  <LinearLayout
        android:id="@+id/footer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:orientation="horizontal"
        android:paddingBottom="10dp"
        android:paddingTop="10dp" >

        <ImageView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:src="@drawable/message_btn" />

        <ImageView
            android:id="@+id/start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/start_btn" />

        <ImageView
            android:id="@+id/call"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:src="@drawable/call_btn" />
  </LinearLayout>
  <com.example.app.SlidingTextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_above="@id/footer" />    



</RelativeLayout>

MainActivity.java:

public class MainActivity extends Activity {
    private int height;
    private int width;
    private Display display;

    private RelativeLayout rootContainer;
    private SlidingTextView slidingTextView;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

}

我删除了尽可能多的代码进行测试。问题仍然存在。

更新3:

问题似乎是:text1.measure(0,textHeight)尽管textHeight=0没关系,但我尝试使用其他值。

它似乎也只有在text1.measure(...)其他设置器之后被调用时才会发生

// No NullPointerException
text1.measure(0,textHeight);

// The other setters
text1.setTextSize(fontSize);
text1.setTextColor(Color.WHITE);
text1.setPadding(textPadding, 0, textPadding, 0);
text1.setGravity(Gravity.CENTER);
text1.setWidth(textWidth);
text1.setMaxLines(1);
text1.setEllipsize(TextUtils.TruncateAt.END);
text1.setMaxWidth(textWidth);
text1.setBackgroundColor(Color.TRANSPARENT);

// Throws NullPointerException
text1.measure(0,textHeight);

有人可以解释为什么吗?大概是因为文本值text1""(从来没有,没有电话setText(...)之前),所以调用制定者之一后,text1s的文字将其设置null或那种东西。我将尝试绕过measure(...),但是得到一个解释会很好。谢谢!

史诗熊猫力量

问题不在setText()中,而是在函数中的Android源代码中,checkForRelayout所以我的猜测是答案在于setText()时TextView.checkForRelayout()的NullPointerException

指出问题所在的地方是textView没有layoutParams:

vh.tv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在运行时生成的Fragment上始终为null savedInstanceState(导航视图)

来自分类Dev

为什么我的HttpContext在Razor页面视图模型上为null?

来自分类Dev

startLeScan():IntentService上为null

来自分类Dev

视图出口在viewDidLoad上为nil

来自分类Dev

在屏幕上为视图定义相等的高度?

来自分类Dev

文本视图的setText()nullPointer异常

来自分类Dev

setText方法上的NullPointerException

来自分类Dev

JRadioButton上的setText动态

来自分类Dev

JavaFx setText字段为int

来自分类Dev

JavaFx setText字段为int

来自分类Dev

Slim上的PUT请求正文为NULL

来自分类Dev

实体框架位于主键上,为null

来自分类Dev

MEANJS在findOne上检查是否为null

来自分类Dev

基本MVC视图将模型属性返回为null

来自分类Dev

使用RedirectToAction时,视图上的模型为null

来自分类Dev

HttpPost操作方法中的视图模型参数为null

来自分类Dev

您是否检查膨胀视图是否为null?

来自分类Dev

从局部视图到控制器的ajax发布为null

来自分类Dev

从Razor视图提交表单时,模型始终为null

来自分类Dev

从视图模型访问窗口时,它始终为null

来自分类Dev

稍后调用时,片段视图属性为null

来自分类Dev

使用RedirectToAction时,视图上的模型为null

来自分类Dev

尝试通过id查找DrawerLayout视图时为null ref

来自分类Dev

HttpPost操作方法中的视图模型参数为null

来自分类Dev

按钮单击后部分视图显示为布局 null

来自分类Dev

片段上的Settext指针异常

来自分类Dev

在类型为“ AppDelegate *”的对象上找不到属性“视图”

来自分类Dev

如何在Android上为列表视图项目设置图标

来自分类Dev

视图以预览为中心,但不在设备上

Related 相关文章

热门标签

归档