2015-02-01 4 views
0

조각에 AutoCompleteText를 만들려고하고 있는데 많은 예제를 보았고 나에게 적합하지 않았습니다 ... 나는 항상 adapter과 같은 오류가 발생합니다. 문제는 내 코드에 오류가 나타나지 않지만 당시 APP를 시작한 후 충돌이 발생한 부분을 클릭합니다. 내가 AutoCompleteTextView에에 클래스를 만든 또한조각의 AutoCompleteText

public class LlistaGenericaFragment extends Fragment { 

String[] totselements; 
String[] imatgeselements; 

public LlistaGenericaFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.llista_generica_fragment, container, false); 
    return rootView; 
} 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    totselements = getResources().getStringArray(R.array.tots); 
    imatgeselements = getResources().getStringArray(R.array.imagenestots); 
    // Each row in the list stores country name, currency and flag 
    List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>(); 

    for(int i=0;i<24;i++){ 
     HashMap<String, String> hm = new HashMap<String,String>(); 
     hm.put("txt", totselements[i]); 
     hm.put("flag", (imatgeselements[i])); 

     aList.add(hm); 
    } 

    // Keys used in Hashmap 
    String[] from = { "imatge","text"}; 

    // Ids of views in listview_layout 
    int[] to = { R.id.imatgeelement,R.id.textelement}; 

    // Instantiating an adapter to store each items 
    // R.layout.listview_layout defines the layout of each item 
    SimpleAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), aList, R.layout.llista_generica_fragment, from, to); 

    // Getting a reference to CustomAutoCompleteTextView of activity_main.xml layout file 
    CustomAutoCompleteTextView autoComplete = (CustomAutoCompleteTextView) getActivity().findViewById(R.id.autocomplete); 


    /** Defining an itemclick event listener for the autocompletetextview */ 
    AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { 
      /** Each item in the adapter is a HashMap object. 
      * So this statement creates the currently clicked hashmap object 
      * */ 
      HashMap<String, String> hm = (HashMap<String, String>) arg0.getAdapter().getItem(position); // UNCHECKED CAST ?????? 
    } 
    }; 
/** Setting the adapter to the listView */ 
    autoComplete.setAdapter(adapter); 
} 

, 그것은 다음과 같습니다 : 같은

내 LlistaGenericaFragment.java 보이는 I는 로그 캣에 받고 있어요

public class CustomAutoCompleteTextView extends AutoCompleteTextView { 

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

/** Returns the country name corresponding to the selected item */ 
@Override 
protected CharSequence convertSelectionToString(Object selectedItem) { 
    /** Each item in the autocompetetextview suggestion list is a hashmap object */ 
    HashMap<String, String> hm = (HashMap<String, String>) selectedItem; // <-- UNCHEKED CAST ???????? 
    return hm.get("txt"); 
} 

오류 이 :

02-01 17:12:13.229 5317-5317/joancolmenero.taulaperiodica.com.taulaperiodicaapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: joancolmenero.taulaperiodica.com.taulaperiodicaapp, PID: 5317 
java.lang.NullPointerException 
     at joancolmenero.taulaperiodica.com.taulaperiodicaapp.LlistaGenericaFragment.onCreate(LlistaGenericaFragment.java:100) 
     at android.app.Fragment.performCreate(Fragment.java:1678) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:859) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
     at android.app.BackStackRecord.run(BackStackRecord.java:684) 
     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5102) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 

여기에서 at joancolmenero.taulaperiodica.com.taulaperiodicaapp.LlistaGenericaFragment.onCreate(LlistaGenericaFragment.java:100)autoComplete.setAdapter(adapter);입니다. 내가)의 getView에 대한 getActivity()을 (변경하는 경우

이 충돌하지 않지만 그것은 말한다 :

02-01 17:51:49.118 10048-11634/joancolmenero.taulaperiodica.com.taulaperiodicaapp W/Filter﹕ An exception occured during performFiltering()! 
java.lang.NullPointerException 
     at android.widget.SimpleAdapter$SimpleFilter.performFiltering(SimpleAdapter.java:354) 
     at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.os.HandlerThread.run(HandlerThread.java:61) 

당신이 나를 도울 수 있기를 바랍니다. AutoCompleteTextView이 당신의 조각 서브 클래스의 getActivity().findViewById insinde에서 onCreate를 호출하면 onCreateView에 반환 된 레이아웃의 일부 인 경우 조각이 아직 활동의 뷰 계층에 연결되어 있지 않기 때문에

+0

에 반환 된 레이아웃에 속한 뷰를 찾기 위해 getView().findViewById을 사용하는 것입니다 프래그먼트 레이아웃에서? –

답변

4

는, null 객체를 반환합니다. 가장 쉬운 수정, 귀하의 경우 onCreateView 다음에 호출되어 onActivityCreated, 내부 논리를 이동, 왜 CustomAutoCompleteTextView이 활동 레이아웃이 아니라 당신이 onCreateView

+0

그럼 onActivityCreated에 대한 onCreateView를 변경하면 어떻게됩니까? –

+0

onActivityCreated에 대해 onCreate를 사용하고 getActivity의 getView 인스턴스를 사용하십시오. – Blackbelt

+0

편집하십시오. –