2

現在、ギャラリーを使用してアイテムのリストを表示しています。私が気に入らないセンターロック機能を除いて、すべて正常に機能します。ここhttp://www.dev-smart.com/archives/34からこの Horizo​​ntalListView 実装を見つけ、それを使用して Android ギャラリーを置き換えたいと考えています。Horizo​​ntalListView.java をダウンロードしてプロジェクトに配置し、Gallery を Horizo​​ntalListView に変更しましたが、アプリを実行しても何も表示されません。ギャラリー (現在は Horizo​​ntalListView) のアイテムは、ArrayAdapter を使用して設定されます。何か間違った設定をしましたか?コードは次のとおりです。

レイアウト Horizo​​ntalListView:

    <com.myapp.HorizontalListView
      android:id="@+id/related"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:background="#ebebeb" >
    </com.myapp.HorizontalListView>

Horizo​​ntalListView アイテム:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#fff"
android:orientation="vertical" >


<ImageView
    android:id="@+id/gameicon"
    android:layout_width="120dip"
    android:layout_height="120dip"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:src="@drawable/iconbig" />

<TextView
    android:id="@+id/gamename"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:gravity="center_horizontal|center_vertical"
    android:text="Title"
    android:textSize="15sp"
    android:textColor="#000000" 
    android:textStyle="bold"/>
</LinearLayout>

アイテムのアダプター:

public class RelatedListAdapter extends ArrayAdapter<GameInfo> {

private ArrayList<GameInfo> items;
public static HashMap<String, String> relatedImageMap;

public RelatedListAdapter(Context context, int textViewResourceId,
        ArrayList<GameInfo> items) {
    super(context, textViewResourceId, items);
    this.items = items;
    if (relatedImageMap == null)
        relatedImageMap = new HashMap<String, String>();
}

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater mInflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = mInflater.inflate(R.layout.related_items, null);
    }

    GameInfo game = items.get(position);
    if (game != null) {
        TextView name = (TextView) v.findViewById(R.id.gamename);
        ImageView icon = (ImageView) v.findViewById(R.id.gameicon);
        if (name != null) {         
            name.setBackgroundColor(Color.parseColor("#ebebeb"));
            name.setText(NewDetailActivity.TruncateString(game.getName(), 8) );
        }
        if (icon != null) {
            icon.setBackgroundColor(Color.parseColor("#ebebeb"));
            if (EfficientAdapter.imageMap.containsKey(game.getId())) {
                String filePath = EfficientAdapter.imageMap.get(game
                        .getId());
                Bitmap bm = BitmapFactory.decodeFile(filePath);
                icon.setImageBitmap(bm);
            } else if (relatedImageMap.containsKey(game.getId())) {
                String filePath = relatedImageMap.get(game.getId());
                Bitmap bm = BitmapFactory.decodeFile(filePath);
                icon.setImageBitmap(bm);
            } else {
                String storagePath = Environment
                        .getExternalStorageDirectory().toString()
                        + getContext().getResources().getString(
                                R.string.imgCacheFolder);
                String image = game.getImgUrl().replaceAll(
                        "[^a-zA-Z 0-9]+", "");
                String filePath = storagePath + image;
                EfficientAdapter.LoadImageFromWebOperations(game.getImgUrl(),
                        filePath, null);
                if (relatedImageMap != null) {
                    synchronized (relatedImageMap) {
                        relatedImageMap.put(game.getId(), filePath);
                    }
                }
                Bitmap bm = BitmapFactory.decodeFile(filePath);
                icon.setImageBitmap(bm);
            }
        }
    }

    return v;
}

}

そして私の活動では:

HorizontalListView related = (HorizontalListView) findViewById(R.id.related);
data = new ArrayList<GameInfo>();
adap = new RelatedListAdapter(this, R.layout.related_items, data);
related.setAdapter(adap);

Horizo​​ntalListView を Gallery に変更すると、すべてが正常に機能し、リストが表示されます。しかし、Horizo​​ntalListView を使用すると、何も表示されません。誰でもこれで私を助けることができますか?

編集:今、何か違うことがわかりました。Horizo​​ntalListView は表示されましたが、初めて開いたときではありませんでした。たとえば、タブ 3 に 3 つのタブと Horizo​​ntalListView があります。アクティビティを開始すると、タブ 1 が表示されます。次に、タブ 3 をクリックしても何も表示されません。タブ 1 またはタブ 2 に変更し、タブ 3 に戻ると、リストが表示されるようになりました。変でしょ?理由を知っている人はいますか?

4

1 に答える 1

1

以前は Horizo​​ntalListView も使用していました。しかし、私の特定のユースケースに適合させるのは難しすぎます。

次に、このクラス Horizo​​ntalScrollView を見つけました。Android SDK で定義されているため、はるかに使いやすく、用途が広いです。

于 2012-07-12T04:05:35.737 に答える