facebook twitter hatena line email

「Android/ListView/カスタム/画像」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
行116: 行116:
  
 
参考:https://qiita.com/ksugawara61/items/2d63f0be279a94b74550
 
参考:https://qiita.com/ksugawara61/items/2d63f0be279a94b74550
 +
 +
==getViewが複数回呼ばれる問題==
 +
ListViewのlayout_heightがmatch_parent以外(wrap_contentとかになっている)と5回呼ばれてしまってました。
 +
これを
 +
<pre>
 +
<ListView
 +
        android:id="@+id/sample_listview"
 +
        android:layout_width="match_parent"
 +
        android:layout_height="wrap_content" />
 +
</pre>
 +
こうすると解決
 +
<pre>
 +
<ListView
 +
        android:id="@+id/sample_listview"
 +
        android:layout_width="match_parent"
 +
        android:layout_height="match_parent" />
 +
</pre>
 +
https://qiita.com/equines/items/ab53b706cf10514a1da5

2018年12月14日 (金) 14:47時点における版

画像サンプル

activity_main.xmlに以下を追加

   <ListView
       android:id="@+id/sample_listview"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />

samplelist_item.xml

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

    <ImageView
        android:id="@+id/thumbnail"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:padding="3dp" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="70dp"
        android:textColor="#000"
        android:padding="5dp"
        android:gravity="center_vertical"
        android:maxLines="1"
        android:text="Sample Text"/>

</LinearLayout>

SampleListItem.java

import android.graphics.Bitmap;

public class SampleListItem {
    private Bitmap mThumbnail = null;
    private String mTitle = null;

    public SampleListItem() {};

    public SampleListItem(Bitmap thumbnail, String title) {
        mThumbnail = thumbnail;
        mTitle = title;
    }

    public void setThumbnail(Bitmap thumbnail) {
        mThumbnail = thumbnail;
    }

    public void setmTitle(String title) {
        mTitle = title;
    }

    public Bitmap getThumbnail() {
        return mThumbnail;
    }

    public String getTitle() {
        return mTitle;
    }
}

SampleListAdapter.java

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import java.util.List;
public class SampleListAdapter extends ArrayAdapter<SampleListItem> {
    private int mResource;
    private List<SampleListItem> mItems;
    private LayoutInflater mInflater;
    public SampleListAdapter(Context context, int resource, List<SampleListItem> items) {
        super(context, resource, items);
        mResource = resource;
        mItems = items;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        if (convertView != null) {
            view = convertView;
        }
        else {
            view = mInflater.inflate(mResource, null);
        }
            SampleListItem item = mItems.get(position);
            ImageView thumbnail = (ImageView)view.findViewById(R.id.thumbnail);
            thumbnail.setImageBitmap(item.getThumbnail());
            TextView title = (TextView)view.findViewById(R.id.title);
            title.setText(item.getTitle());
        return view;
    }
}

MainActivity.javaのonCreateに追加

ListView listView = (ListView)findViewById(R.id.sample_listview);
ArrayList<SampleListItem> listItems = new ArrayList<>();
for (int i = 0; i < 4; i++) {
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
    SampleListItem item = new SampleListItem(bmp, "sample data No. " + String.valueOf(i));
    listItems.add(item);
}
SampleListAdapter adapter = new SampleListAdapter(this, R.layout.samplelist_item, listItems);
listView.setAdapter(adapter);

参考:https://qiita.com/ksugawara61/items/2d63f0be279a94b74550

getViewが複数回呼ばれる問題

ListViewのlayout_heightがmatch_parent以外(wrap_contentとかになっている)と5回呼ばれてしまってました。 これを

<ListView
        android:id="@+id/sample_listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

こうすると解決

<ListView
        android:id="@+id/sample_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

https://qiita.com/equines/items/ab53b706cf10514a1da5