2012-07-10 1 views
4

회 전자 드롭의 첫 번째 요소의 높이를 0으로 설정하는 데 사용하는 사용자 지정 어댑터가있는 회 전자가 있습니다. 나는 그것을 보이지 않기 때문에 사용자가 클릭하지 않고도 회 전자 (첫 번째 요소)에 기본 메시지를 갖도록이 작업을 수행합니다. getDropDownView에서안드로이드 : 사용자 지정 스피너 드롭 다운 xml 레이아웃 오류가있는 사용자 지정 어댑터

package org.digitalhealthagency.elaj.util; 

import java.util.ArrayList; 

import org.digitalhealthagency.elaj.gui.R; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.SpinnerAdapter; 
import android.widget.TextView; 

public class CustomAdapter extends ArrayAdapter implements SpinnerAdapter{ 

    Context context; 
    int textViewResourceId; 
    ArrayList arrayList; 

    public CustomAdapter(Context context, int textViewResourceId, ArrayList arrayList) { 
     super(context, textViewResourceId, arrayList); 

     this.context = context; 
     this.textViewResourceId = textViewResourceId; 
     this.arrayList = arrayList; 

    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent){ 
     if (convertView == null) 
     { 
     LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     //convertView = vi.inflate(android.R.layout.simple_spinner_dropdown_item, null); 
     convertView = vi.inflate(R.layout.spinner_item, null); 
     } 

     TextView textView = (TextView) convertView.findViewById(android.R.id.text1); 
     textView.setText(arrayList.get(position).toString());//after changing from ArrayList<String> to ArrayList<Object> 

     if (position == 0) { 
      textView.setHeight(0); 
     } 
     else{ 
     textView.setHeight(100); 
     } 

     return convertView; 
    } 



} 

나는 spinner_item.xml 대신 android.R.layout.simple_spinner_dropdown_item으로 팽창하는 것을 시도하고있다. 다음과 같이 내 spinner_item는 다음과 같이

<?xml version="1.0" encoding="utf-8"?> 

    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawableLeft="?android:attr/listChoiceIndicatorSingle" 
    android:gravity="right|center_vertical" 
    android:singleLine="true" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:paddingRight="10dp" 
    android:ellipsize="marquee" /> 

그리고 내 활동 코드

, 내가 어댑터를 사용, 보이는 내 로그 고양이에서 다음과 같은 오류가
 CustomAdapter adapter = new CustomAdapter(this, R.layout.spinner, subSpecialities); 
     adapter.setDropDownViewResource(R.layout.spinner_item); 
     mSubSpecialtySpinner.setAdapter(adapter); 

,

07-10 10:49:34.103: E/AndroidRuntime(518): FATAL EXCEPTION: main 
07-10 10:49:34.103: E/AndroidRuntime(518): java.lang.NullPointerException 
07-10 10:49:34.103: E/AndroidRuntime(518): at org.digitalhealthagency.elaj.util.CustomAdapter.getDropDownView(CustomAdapter.java:40) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:569) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:565) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.AbsListView.obtainView(AbsListView.java:2033) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.ListView.measureHeightOfChildren(ListView.java:1244) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.ListView.onMeasure(ListView.java:1155) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.View.measure(View.java:12723) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.View.measure(View.java:12723) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.View.measure(View.java:12723) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.View.measure(View.java:12723) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.View.measure(View.java:12723) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
07-10 10:49:34.103: E/AndroidRuntime(518): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.View.measure(View.java:12723) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.os.Looper.loop(Looper.java:137) 
07-10 10:49:34.103: E/AndroidRuntime(518): at android.app.ActivityThread.main(ActivityThread.java:4424) 
07-10 10:49:34.103: E/AndroidRuntime(518): at java.lang.reflect.Method.invokeNative(Native Method) 
07-10 10:49:34.103: E/AndroidRuntime(518): at java.lang.reflect.Method.invoke(Method.java:511) 
07-10 10:49:34.103: E/AndroidRuntime(518): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
07-10 10:49:34.103: E/AndroidRuntime(518): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
07-10 10:49:34.103: E/AndroidRuntime(518): at dalvik.system.NativeStart.main(Native Method) 

아무도 나를 도울 수 없습니까?

+0

에서 그것을 ..change! 덕분에 – Behzad

답변

5

textView is null so NPE는, 나는 귀하의 질문에 그것을 발견 레이아웃을 찾고 있었다 R.id.text1 대신 android.R.id.text1 업 투표

TextView textView = (TextView) convertView.findViewById(android.R.id.text1); 
                 ^^^^^^^^  
+2

또한''TextView''는 XML에 ID가 설정되어 있지 않으므로 R.id.text1은 다른 레이아웃 파일이 다른 요소의 ID를 선언하는지에 따라 컴파일 또는 런타임 오류를 일으킬 수 있습니다. – ninetwozero

+0

@ninetwozero 두 가지 모두 내 문제를 해결해 주셔서 감사합니다. :) –

+0

나중에 참조 할 수 있도록 android : id = "@ android : id/text1"을 사용하면 android.R.id.text1을 사용할 수 있지만 제공한다면 안드로이드를 사용하여 내 자신의 ID : id = "@ + id/text1"그런 다음 R.id.text1을 사용해야합니다. –

관련 문제