2012-12-04 26 views
4

我正在做Android開發中的第一步。 在此期間,我正在嘗試創建一個自定義組件(用於測試目的),稍後將用於活動。Android自定義組件在運行時工作正常,但在設計時無法運行

下面是ClearableEditText.java代碼:

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.LayoutInflater; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 

public class ClearableEditText extends LinearLayout { 

    private EditText textField; 
    private Button button; 

    public ClearableEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 


    @Override 
    protected void onFinishInflate() { 
     super.onFinishInflate(); 

     LayoutInflater.from(this.getContext()).inflate(R.layout.clearable_text, this); 

     setupViewItems(); 
    } 

    private void setupViewItems() { 
     // TODO Auto-generated constructor stub 


     this.textField = (EditText) findViewById(R.id.editText1); 
     this.button = (Button) findViewById(R.id.button1); 

     this.textField.setText("Hello World 123"); 
    }  
} 

下面是其佈局的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"   
     android:text="Button" /> 

</LinearLayout> 

這是將組件整合活動的XML佈局代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".SegundaActivity" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="@string/ativity2_text" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="33dp" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <com.example.aplicacaoteste.ClearableEditText 
     android:id="@+id/newComponent" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/editText1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="33dp" 
     android:ems="10" > 
    </com.example.aplicacaoteste.ClearableEditText> 


</RelativeLayout> 

當我運行該應用程序,組件工作正常。儘管如此,只要我切換到我的活動的圖形佈局,我得到了以下錯誤消息:

java.lang.NullPointerException 
Exception details are logged in Window > Show View > Error Log 

java.lang.NullPointerException 
    at com.example.aplicacaoteste.ClearableEditText.setupViewItems(ClearableEditText.java:36) 
    at com.example.aplicacaoteste.ClearableEditText.onFinishInflate(ClearableEditText.java:26) 
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:754) 
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:718) 
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:749) 
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:718) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:372) 

我不知道這裏發生了什麼線索。誰能幫我嗎?

+0

你是什麼意思「只要我切換到我的活動的圖形佈局」。代碼沒有問題。 – stinepike

+0

在Eclipse中編輯佈局時,可以使用拖放用戶界面對其進行編輯,也可以編輯相應的XML。 拖放GUI是我的意思是圖形佈局(編輯佈局時兩個可用選項卡之一)。 – droidptdev

+0

你得到了空指針,因爲你沒有正確地膨脹它在構造函數內創建inflator對象,並使用這個對象來調用像(TextView)的視圖inflator.findViewById(); – PiyushMishra

回答

0

此源代碼工作完美。這是我的源代碼

package com.testapplication.customtools; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.LayoutInflater; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 

public class ClearableEditText extends LinearLayout{ 

    private EditText textField; 
    private Button button; 

    public ClearableEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 


    @Override 
    protected void onFinishInflate() { 
     super.onFinishInflate(); 

     LayoutInflater.from(this.getContext()).inflate(R.layout.clearable_text, this); 

     setupViewItems(); 
    } 

    private void setupViewItems() { 
     // TODO Auto-generated constructor stub 


     this.textField = (EditText) findViewById(R.id.editText1); 
     this.button = (Button) findViewById(R.id.button1); 

     this.textField.setText("Hello World 123"); 
    }  
} 

這是我的主要活動的XML文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".SegundaActivity" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="test" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="33dp" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <com.testapplication.customtools.ClearableEditText 
     android:id="@+id/newComponent" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/editText1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="33dp" 
     android:ems="10" > 
    </com.testapplication.customtools.ClearableEditText> 


</RelativeLayout> 

我沒有得到任何的異常。檢查你的包名

相關問題