2012-04-03 3 views
4

버튼 클릭으로 표시되는 ListPopupWindow에 간단한 문자열 배열을 표시하려고합니다. 그러나 내가 최소한 ArrayAdapter<String> 또는 맞춤형 어댑터 중 최소한의 설정을 할 때 팝업 창이 나타나면 리소스를 찾을 수 없습니다. 여기에 내가 사용하고있는 코드가있다 (스택 트레이스와 함께). 무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까?ListPopupWindow를 사용자 지정 어댑터와 함께 사용하려면 어떻게해야합니까?

Thread [<1> main] (Suspended (exception Resources$NotFoundException)) 
    Resources.loadXmlResourceParser(int, String) line: 2047 
    Resources.getLayout(int) line: 853 
    PhoneLayoutInflater(LayoutInflater).inflate(int, ViewGroup, boolean) line: 389 
    ArrayAdapter.createViewFromResource(int, View, ViewGroup, int) line: 375  
    ArrayAdapter.getView(int, View, ViewGroup) line: 366  
    ListPopupWindow$DropDownListView(AbsListView).obtainView(int, boolean[]) line: 2146 
    ListPopupWindow$DropDownListView.obtainView(int, boolean[]) line: 1156 
    ListPopupWindow$DropDownListView(ListView).measureHeightOfChildren(int, int, int, int, int) line: 1261 
    ListPopupWindow.buildDropDown() line: 1083 
    ListPopupWindow.show() line: 517  
    AndroidSandboxActivity.showListPopup() line: 41 
    AndroidSandboxActivity$1.onClick(View) line: 28 
    Button(View).performClick() line: 3122 
    View$PerformClick.run() line: 11942 
    ViewRoot(Handler).handleCallback(Message) line: 587 
    ViewRoot(Handler).dispatchMessage(Message) line: 92 
    Looper.loop() line: 132 
    ActivityThread.main(String[]) line: 4028  
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
    Method.invoke(Object, Object...) line: 491 
    ZygoteInit$MethodAndArgsCaller.run() line: 844 
    ZygoteInit.main(String[]) line: 602 
    NativeStart.main(String[]) line: not available [native method] 

어떤 도움을 주시면 감사하겠습니다 :

public class AndroidSandboxActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final Button btn = (Button)findViewById(R.id.btn1); 
     btn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showListPopup(btn); 
      } 
     }); 
    } 

    public void showListPopup(View anchor) { 
     ListPopupWindow popup = new ListPopupWindow(this); 
     popup.setAnchorView(anchor); 

     ListAdapter adapter = new MyAdapter(this); 
     popup.setAdapter(adapter); 
     popup.show(); 
    } 

    public static class MyAdapter extends BaseAdapter implements ListAdapter { 
     private final String[] list = new String[] {"one","two","three"}; 
     private Activity activity; 
     public MyAdapter(Activity activity) { 
      this.activity = activity; 
     } 

     @Override 
     public int getCount() { 
      return list.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return list[position]; 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     private static int textid = 1234; 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      TextView text = null; 
      if (convertView == null) { 
       LinearLayout layout = new LinearLayout(activity); 
       layout.setOrientation(LinearLayout.HORIZONTAL); 

       text = new TextView(activity); 
       text.setId(textid); 
       layout.addView(text); 
       convertView = layout; 
      } else { 
       text = (TextView)convertView.findViewById(textid); 
      } 
      text.setText(list[position]); 
      return convertView; 
     } 
    } 
} 

그리고 여기에는 스택 트레이스 (내 마음을 놀라게 것은 그것이 내가 내 자신의 사용자 정의 어댑터를 사용하고 때이 ArrayAdapter을 사용하고 말한다이다)이다 !

답변

5

ArrayAdapter이 작동하지 않는 이유를 알아 냈습니다. ArrayAdapter이리스트보기와 관련하여 어떻게 작동하는지 완전히 알지 못했기 때문에 배열 어댑터에 대한 잘못된 리소스 ID를 선택했습니다. 이 내장 안드로이드 자원 사용 : 배열 어댑터를 구성하는 관련 자원 인수

android.R.layout.simple_dropdown_item_1line 

을, 나는 일을 작동시킬 수 있었다. 위의 코드에서 내 사용자 지정 어댑터가 특정 ID를 참조하지 않았으므로 위의 사용자 지정 어댑터가 작동하지 않는 이유는 정확히 알지 못합니다. 내가 제공 한 스택 추적 코드는 아마도 ArrayAdapter을 사용했던 코드의 오래된 버전 일 것이다.

관련 문제