2012-10-05 4 views
0

목록 항목에 2 줄의 텍스트가있는 목록을 만들어야합니다. 사용자 지정 목록 항목을 만들기 시작했지만 TwoLineListItem 구성 요소를 발견했습니다.TwoLineListItem 구성 요소 사용

pageFilterResultView=new TwoLineListItem(containerActivity); 
pageFilterResultView.getText1().setText("Test"); 

그러나 getText1 반환 널 (null), 두 번째 라인은 NullPointerException를 던졌습니다 :이 코드를 썼다. 그래서 나는 생성자 대신에 부풀려진 레이아웃을 사용해야한다고 생각했다. TwoLineListItem documentation 내가 레이아웃의 android.R.layout.two_line_list_item 자원을 사용할 수 있습니다 지정, 그래서에 코드를 변경 : 레이아웃이 실제로 LinearLayout 때문에

LayoutInflater inflater=(LayoutInflater)containerActivity. 
     getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
pageFilterResultView=(TwoLineListItem)inflater.inflate(android.R. 
     layout.two_line_list_item,null); 
pageFilterResultView.getText1().setText("Test"); 

그러나, 이것은 ClassCastException가 발생합니다. TwoLineListItemRelativeLayout에서 상속되므로 레이아웃을 상위 클래스로 캐스팅 할 수도 없습니다.

질문은 다음과 같습니다. TwoLineListItem은 어떻게 올바르게 사용합니까? 내가 원하는대로 사용자 정의 레이아웃을 만들어야합니까? 그렇다면 목록 항목을 직접 만들어야하는 경우이 구성 요소의 요점은 무엇입니까?

+0

로그 고양이 오류를 넣으십시오 .......... –

+0

나는 왜 오류가 발생하는지 알지만, 이것은 문제가 아닙니다. 이 구성 요소를 사용할 올바른 방법이 무엇인지 알고 싶습니다. – user940016

답변

1

어떻게 TwoLineListItem을 올바르게 사용합니까?

TwoLineListItem 위젯은 사용자가 제공해야하는 TextViews 이상의 외관입니다. ListView의 행에 TwoLineListItem을 사용하려면 TwoLineListItem 위젯과 특정 ID (android.R.id.text1android.R.id.text2)를 가진 두 번째 (적어도) TextView 명의 어린이가있는 행 레이아웃이 필요합니다. 이런 식으로 뭔가 : 당신이했던 것처럼

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

    <TextView 
     android:id="@android:id/text1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@android:id/text2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@android:id/text1"/> 

</TwoLineListItem> 

그런 다음 당신이 getView() 방법에서 사용할 수 있습니다 : 물론

pageFilterResultView=(TwoLineListItem)inflater.inflate(R.layout.the_layout_file_above,null); 
pageFilterResultView.getText1().setText("Test"); 

당신이 TwoLineListItem의 자녀로서 포함 레이아웃 파일을 사용할 수있는 가능성을 가지고 (만큼 당신이 필요한 IDS)와 두 TextViews 가지고 :

<?xml version="1.0" encoding="utf-8"?> 
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <!-- the android version of the two line layout --> 
    <include layout="@android:layout/two_line_list_item" /> 

</TwoLineListItem> 

그러나 이것은 단지 레이아웃 깊이를 증가시키고 피해야을 .

만약 내가 그렇다면 모두 자신의 목록 항목을 만드는 작업 인 을 수행해야한다면이 구성 요소의 요점은 무엇입니까?

이 위젯을 프로그래밍 방식으로 사용할 수 없다는 판단에이 구성 요소가 필요하지 않습니다.

+0

고마워, 나는'include layout = ...'옵션을 알지 못했지만, 피해야한다고 말했고, 결국 내 자신의 구성 요소를 사용할 것이라고 생각한다. – user940016

+0

@ user940016 포함 된 레이아웃에서'merge'를 사용하지 않으면 내용과'TwoLineListItem' 위젯 사이에 쓸모없는'ViewGroup'이 생기기 때문에 제 관점에서 피해야합니다. – Luksprog

-1

레이아웃 코드를 try catch 블록에 넣으십시오. ClassCastException을 사용하여 블록을 잡아두면 내 친구가 잘 작동합니다. .....

+2

이것은 말도 안돼! 인플레이션에서 얻은 결과가 올바른 유형이 아닌 경우 구성 요소 인스턴스를 어떻게 얻을 수 있습니까? – user940016

관련 문제