0

listViewリスト内の各項目がTextViewと 1 つ (または複数)で構成されるように を作成しようとしていますImageView

これまでのところ、とアダプターlistViewのみTextViewsを使用するアイテムで を動作させることができました。ArrayList<String>ArrayAdapter<String>

私が望むものを達成する方法はありますか?そして、他の方法はより簡単でしょうか?(TableRows の使用と同様ですが、onClickListener を持つように構成できるかどうかはわかりません)

4

4 に答える 4

2

カスタムリストビューを使用する必要があります。 http://www.androidpeople.com/android-custom-listview-tutorial-part-1。リンクをご覧ください。

  @Override
   public int getItemViewType(int position) 
   {
    int type;
    if (ID.get(position)== 0){
    type = TYPE_ITEM1;  //type 0 for image
   } 
     else if (ID.get(position) == 1){
    type = TYPE_ITEM2; //type 1 for text
   }else {
    type = TYPE_ITEM3; //type 2 for videos
 }
 return type;
 }
 @Override
  public int getViewTypeCount() {
 return 3;    //three different layouts to be inflated
}
于 2012-11-08T14:49:13.437 に答える
1

私はあなたが必要とすることをするかもしれない私のapsからすべてのコードをアップロードしました。ダウンロードして、好きなように使用します。

https://github.com/billmcnamara/BarcelonaTravelGuide.Android

于 2012-11-09T17:37:49.240 に答える
1

ListViewのArraydapterを介してカスタムビューを提供できます(ArrayAdapterを拡張して独自のビューを作成できます)。他の質問では、はい、TableRowsをクリック可能にすることができます(たとえば、XMLレイアウトファイルでこれを行うことができます)。

于 2012-11-08T14:56:20.663 に答える
1

次のようなレイアウトで `list_items.xml` を作成します。

<LinearLayout
    android:orientation="horizontal"
    [...]
     <ImageView
        [...]
        android:id="@+id/myimage"/>
     <TextView
        [...]            
        android:id="@+id/mytext"/>
</LinearLayout>

次に BaseAdapter を作成します。

  class MyAdapter extends BaseAdapter {

     private Context context;
     private LayoutInflater inflater;
     private ViewHolder holder;
     private ArrayList<HashMap<String, String>> data;

     public MyAdapter(Context context, ArrayList<HashMap<String, String>> data) {
         this.context = context;
         this.data = data;
         inflater = LayoutInflater.from(context);
     }

     // Below the Magic
     public View getView(int position, View convertView, ViewGroup parent) {
         inflater = (LayoutInflater)    context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

          if(convertView == null || convertView.getTag() == null) {
              // Here you load the list_items.xml an inflate your Layout with it
              convertView = inflater.inflate(R.layout.list_items, null);

              holder = new ViewHolder();
              holder.text = (TextView) convertView.findViewById(R.id.mytext);
              holder.image = (ImageView) convertView.findViewById(R.id.myimage);

              convertView.setTag(holder);

           } else {             
              holder = (ViewHolder) convertView.getTag();
           }

           // We get the HashMap for our current Position in the ListView 
           row = data.get(position);

           if(row != null) {
               holder.text.setText(row.get("test"));
               // Below could be setImageBitmap, setImageResource,...
               // depends on how you get your image
               holder.image.setImageBitmap(getImage(row.get("image"));
           }

           return convertView;
       }

       class ViewHolder {
           TextView text;
           ImageView image;
       }

 }

 public getImage(String image) {
      // Get your image from where you want it SD, drawable, internet)
 }

次のように呼び出します。

MyAdapter myAdapter = new MyAdapter(this, data);
myListView.setAdapter(myAdapter);

各行の HashMap を含む ArrayList でデータを渡すと仮定しています。

   #ListItem1 = data(0) - data.get(0).get("title"), data.get(0).get("image")
   #ListItem2 = data(1) - data.get(1).get("title"), data.get(1).get("image")
于 2012-11-08T15:05:28.877 に答える