3

문제점 : 나는 OnItemClickListener가있는 AutoCompleteTextView가 있습니다. 이것은 18 개월 동안 잘 작동했지만 HTC Desire S에서 가로 모드 항목을 선택하면 NullPointerException이 발생합니다. 세로 모드 나 다른 휴대 전화 또는 에뮬레이터에서 오류가 없습니다. 그것을 테스트).AutoCompleteTextView OnItemClickListener null 매개 변수 (HTC Desire S의 가로 모드)

AdapterView<?> av 매개 변수가 null로 전달됩니다. 왜이게 될 것이며, 어떻게 해결할 수 있습니까?

코드 :

myAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.myAutoCompleteTextView); 
myAutoCompleteTextView.setSingleLine(); 

myAutoCompleteTextView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> av, View v, int index, long arg) { 
     String selectedItem = (String)av.getItemAtPosition(index); 
     //Do stuff with selected item ... 
    } 
} 

오류 :

java.lang.NullPointerException 
    at uk.co.myCompany.mobile.android.myCompanymobile.pages.groups.AbstractGroupSelectionPage$3.onItemClick(AbstractGroupSelectionPage.java:228) 
    at android.widget.AutoCompleteTextView.onCommitCompletion(AutoCompleteTextView.java:993) 
    at com.android.internal.widget.EditableInputConnection.commitCompletion(EditableInputConnection.java:76) 
    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:368) 
    at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:86) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:4385) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
    at dalvik.system.NativeStart.main(Native Method) 

추가 코드 - 내 사용자 지정 어댑터 내부 클래스 :

/** 
* An inner class to simply make a custom adapter in which we can alter the on-screen look of selected groups. 
*/ 
private class SelectedGroupAdapter extends ArrayAdapter<Group> { 
    private ArrayList<Group> items; 
    private int layout; 

    public SelectedGroupAdapter(Context context, int layout, ArrayList<Group> items) { 
     super(context, layout, items); 
     this.items = items; 
     this.layout = layout; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(layout, null); 
     }       
     Group o = items.get(position); 

     //Display the group name and number of contacts 
     if (o != null) { 
      TextView groupName = (TextView) v.findViewById(R.id.groupName); 
      TextView noOfContacts = (TextView) v.findViewById(R.id.noOfContacts); 
      if (groupName != null) { 
       groupName.setText(o.getGroupName()); 
      } 
      if(noOfContacts != null) { 
       if (o.isDynamic()) 
        noOfContacts.setText(getString(R.string.dynamic)); 
       else { 
        int contactsCount = o.getGroupSize(); 
        if(contactsCount == 1) noOfContacts.setText(contactsCount + " " + getString(R.string.contact)); 
        else noOfContacts.setText(contactsCount + " " + getString(R.string.contacts)); 
       } 
      } 
     } 
     return v; 
    }    
} 
+0

이 활동의 ​​매니페스트에서 'android : configChanges = "orientation"'을 (를) 사용 하시겠습니까? –

+0

예 : android : configChanges = "keyboardHidden | orientation"/> –

+0

이 줄의 오류 AbstractGroupSelectionPage.java:228 이것은 무엇입니까? – Venky

답변

0

내 직감은 매니페스트에 android:configChanges="orientation"을 선언했기 때문에 이전 OnItemClickListener이 여전히 고집하고, 기술적으로 새로운 레이아웃을 가지고 있기 때문에 오리엔테이션 변경에 앞서 사용 된 AdapterView이 더 이상 존재하지 않는다는 것입니다. 따라서 항목을 클릭하면 null입니다.

  1. 는 매니페스트에서 orientation 옵션을 제거

    나는 이러한 경우 즉,이 문제를 해결 것이라고 생각 2 가지가있다. configChanges에있는 모든 이벤트는 안드로이드가 처리하도록하는 것과 달리 안드로이드는 "나는이 구성 변경을 처리하고있어, 내가 처리하도록하겠습니다"라고 알려줍니다. 오리 엔테이션 변경의 경우 안드로이드에 대한 정상적인 작동은 Activity을 파괴하고 다시 생성하는 것입니다 (데이터로 자동으로 일부 View을 다시 채우는 데주의 할 것입니다).

  2. 당신이 다음, 방향 변경을 처리 을 무시하고 onCreate 방법에 재현되어 있어야합니다 (사용중인 중 ListView, GridView) 새로운 AdapterView 객체에 OnItemClickListener을 설정해야 결정합니다.

+0

방금 ​​옵션 1을 시도했지만 null 포인터가 여전히 발생했습니다. 음, 너의 직감이 불행하게도 잘못되었다는 것을 암시한다고 생각하니? –

+0

예, 가능합니다 :( –

관련 문제