2012-02-14 8 views
1

getView()メソッドをArrayAdapterにオーバーロードしました。 getView()を上書きするときにチェックボックスの機能を維持する方法があるかどうか疑問に思っていましたか?ArrayAdapterでgetViewをオーバーライドしても、チェックボックスを維持しますか?

私の現在の実装では、イメージと各行のテキストのみが表示されます。上書きする前にチェックボックスが表示されなくなりました。

以下

私のコードです:

public class ShortcutsArrayAdapter extends ArrayAdapter<ResolveInfo> { 

    private final Activity context; 
    private final List<ResolveInfo> objects; 
    private PackageManager pm = null; 

    public ShortcutsArrayAdapter(Activity context, int textViewResourceId, 
      List<ResolveInfo> objects, PackageManager pm) { 
     super(context, textViewResourceId, objects); 
     this.context = context; 
     this.objects = objects; 
     this.pm = pm; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflator = context.getLayoutInflater(); 
     View rowView = inflator.inflate(R.layout.rowlayout, null, true); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); 
     textView.setText(objects.get(position).loadLabel(pm)); 
     try { 
      imageView.setImageBitmap(((BitmapDrawable) pm.getApplicationIcon(objects.get(position).activityInfo.applicationInfo.packageName)).getBitmap()); 
     } catch (NameNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return rowView; 
    } 

} 

そして、ここでは、私は、アダプタを作成しています方法です。ここで

appList = getApplicationList(); 
    setListAdapter(new ShortcutsArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, appList, pm)); 
    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

は、行レイアウトxmlです:

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

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="40dp" 
     android:layout_height="40dp"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/label" 
     android:text="@+id/label"/> 

</LinearLayout> 

答えて

1

super.getView()を呼び出して、それからやりたいカスタムの作業をしてみませんか? いずれにしても、チェックボックスが表示されない理由はわかりません。他のコンポーネントの背後に隠れているかもしれません。あなたはレイアウトをチェックしましたか?テキストボックスの前後に移動してみてください。

row_layout.xmlにチェックボックスが必要な場合があります。次のようなものがあります。

<CheckBox 
     android:id="@+id/check" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="4px" 
     android:layout_marginRight="10px" > 
    </CheckBox> 
+0

「super.getView(position、convertView、parent);」をメソッドに追加するとき。これは、実行時にlogcatから取得するエラーです。 '02-14 15:44:48.924:E/AndroidRuntime(26397):java.lang.IllegalStateException:ArrayAdapterはリソースIDがTextViewであることを要求します。私はそれをいくつかのランダムな 'TextView'に変更しましたが、それでも動作しませんでした。それは '無効な資源'だ。 – prolink007

+0

@ prolink007あなたのrow_layout.xmlのチェックボックスはどこですか? – Sid

+0

OoooooooooopSSSSS!私のXMLにチェックボックスを入れることを忘れてしまった。より多くの目が良い。ありがとうございました。 – prolink007

関連する問題