2011-06-14 5 views
5

저는이 문제에 정말로 고심하고 있습니다. 수량을 증가시키고 수량을 기준으로 가격을 업데이트하는 간단한 텍스트 스위치를 사용하려고합니다. 바로 지금 내 XML에서 TextSwitcher 내에서 TextView와 같은 것을 사용하여 수량을 증가시킵니다. 나는 findViewById(R.id.quantity)로 textview를 얻는다.TextSwitcher NullPointer 오류

은 그래서 이것은 내가 설정에 증가 수량 (내가하는 ViewFactory를 implemementing하고)

switcher = (TextSwitcher) findViewById(R.id.switcher); 
switcher.setFactory(this); 
quantity = (TextView) findViewById(R.id.quantity); 

나는 또한 또한

@Override 
    public View makeView() { 
     return quantity; 
    } 

증분 버튼 makeView()을 무시하고 찾을 수있다 것입니다 카운터가 증가하고 스위처의 텍스트를 현재 카운트로 설정합니다. 이와 같이 :

switcher.setText(String.valueOf(currentQuantity)); 

누군가 내가 내가 뭘 잘못하고 있는지 알려줄 수 있습니까 ?? 나는이 라인에서 내 nullpointer가 계속 : 여기

switcher.setFactory(this); 

하면 XML 조각입니다 :

<TextSwitcher android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/switcher"> 
      <TextView android:text="TextView" android:id="@+id/quantity" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 
     </TextSwitcher> 
+0

당신이 게시 할 수 XML? – Torid

+0

확실한 ive 업데이트 – HAxxor

답변

20

:

의 setText (CharSequence를 텍스트는) 다음 뷰와 다음 뷰 스위치의 텍스트를 설정합니다. 이것은 이전 텍스트 에 애니메이션을 적용하고 다음 텍스트를 애니메이션에 적용하는 데 사용할 수 있습니다.. 당신이 새로운 텍스트를 수신하고 애니메이션을 적어도 두 개의 텍스트 뷰, 기존의 텍스트 하나 하나가 필요합니다 의미

다음 XML 작업을해야합니다 :

<TextSwitcher 
     android:id="@+id/counter" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="1"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
    </TextSwitcher> 
+0

적어도 두 개의 텍스트 뷰가 필요합니다 " android.view.InflateException : 이진 XML 파일 라인 # 0 : ViewSwitcher'에 2 개 이상의 뷰를 추가 할 수 없습니다; f – murt

+0

@murt이 답변은 2011 년에 작성되었으므로 ViewSwitcher의 동작이 변경되었을 가능성이 있습니다. – Jave

1

확인 당신이 이전에 TextSwitcher

+0

올바른 xml 파일로 설정됩니다. – HAxxor

+0

은 레이아웃 파일의 이름으로 설정하십시오. 예를 들어 레이아웃이 simplelist.xml이라면, 당신은 onCreate 메소드의 시작 부분에서'setContentView (R.layout.simplelist)'를 호출 할 것입니다. –

+0

이 이미 설정되어 있습니다. 그것은 setContentView와 아무런 관련이 없다. – HAxxor

1

Mmm..interesting에 대한보고 setContentView라는 물론, 여기에서 똑같은 문제가 발생했습니다. 내 경우 두 가지 문제가 있었다. 먼저 makeView에서 null을 반환했다. 내가 findViewById에서 참조를 얻는 동안 당신이 믿는 것은 아니다. (때때로이 메서드는 실패하고 널 참조를 리턴한다. 나는 거기에 중단 점을 넣고 널 포인터를 갖지 않도록 권한다.).

내가 가지고있는 두 번째 문제점 (그리고 이것은 당신 것일 수도 있습니다)은 TextSwitcher가 하위 뷰를 가질 것으로 기대하지 않는다는 것입니다. 따라서 TextView를 내부에 배치해서는 안됩니다. 해당 TextView 제거하고 작동하는지보십시오.

1

null을 반환하는 findViewById와 동일한 문제가 발생했습니다. 두 시간의 파기 끝에 마침내 문제를 해결할 수있었습니다. 그것은 제 코드에서 실수입니다. 비슷한 실수를 범할 가능성이 있습니다.

내 코드가 있었다 (원래 코드가 아닌 그림의 목적을 위해) :

public class MyTextSwitcher extends TextSwitcher { 
public MyTextSwitcher(Context context, AttributeSet attrs) { 
    super(context); 
} 

오류가 생성자 호출이다. 생성자의 코드는 사물이 작동하기 위해 다음과 같이 변경해야합니다

super(context, attrs); // note the extra attrs parameter 

실수 (그리고 다른 클래스에서 비슷한 실수) findViewById 볼 수없는 모든 "새로"정의 자원을 일으킬 수 있습니다.

나에 대한 수치 나는 오늘 같은 실수를 두 번했다! Documentation for TextSwitcher에서