3

私はAndroidアプリを開発していますが、そのユースケースの1つは、次の状況を表示することです。

  1. リンクのリストがあります(L)。これらの各リンクは、インターネット上の画像のURLです。
  2. (L)の各画像をダウンロードして、ListViewに表示する必要があります。ListViewには、画像を挿入できる2つの行があるはずです。このアプリに似たようなことをしたいです;
  3. 写真をHorizo​​ntalScrollViewに表示する必要があります。
  4. 写真はオンデマンドでダウンロードする必要があります。つまり、Horizo​​ntalScrollViewがこの写真を表示する位置にあるときに、スレッドを使用して写真をダウンロードするだけです(この状況と同様)。

私の質問:

  1. ListViewをHorizo​​ntalScrollViewに挿入することは可能ですか?(はいの場合、どうすればよいですか?)
  2. どうすればHorizo​​ntalScrollViewを使用できますか?つまり、ScrollView内でListViewを使用する方法に違いはありますか?

  3. 同じ目的を持つプラグイン/プロジェクトを知っていますか?

4

3 に答える 3

2

質問1-おそらく、Horizo​​nzalListViewのリストを使用するように設計を再考する必要があります。
質問2-プログラムでHorizo​​ntialListViewのリストを作成し、垂直スクロールビューでラップされたLinearLayout内に配置できます。

myhlist.xmlレイアウト:

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

  <LinearLayout android:id="@+id/list_of_hlist_placeholder"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center_horizontal"/>

</ScrollView>

あなたの活動:

public class ListOfHListlActivity extends Activity {

/** List of ArrayAdapter with each bind to a HorizontialListView created programmatically */
private List<MyAdapter> myAdapters = new ArrayList<MyAdapter>();
/** List of your data model */
private List<Object> myDataList;

/**
 * Worker thread running in background doing dirty job.
 */
private class DoDirtyJobAsyncTask extends AsyncTask<Void, MyAdapter, Void> {

    @Override
    protected Void doInBackground(Void... params) {
    // do your dirty job here, to populate myDataList
        for (Object myData : myDataList) {
            MyAdapter myAdapter = new MyAdapter(myData);
            myAdapters.add(myAdapter);
            publishProgress(myAdapter);
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(MyAdapter... myAdapters) {
        int currViewId = 1;
        for (final MyAdapter myAdapter: myAdapters) {
            HorizontialListView listview = new HorizontialListView(getApplicationContext(), null);
            listview.setId(currViewId);
            listview.setAdapter(myAdapter);
            listview.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // I am clickable.
                }
            });

            RelativeLayout listOfHListLayout = (RelativeLayout) findViewById(R.id.list_of_hlist_placeholder);
            // don't forget set height here, you know the height issue in HorizontialListView
            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.FILL_PARENT, 40);
            listOfHListLayout.addView(listview, layoutParams);
            currViewId++;
        }
    }

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new DoDirtyJobAsyncTask().execute();
    setContentView(R.layout.myhlist);
}

}

于 2011-08-25T00:02:11.173 に答える
1

このプロジェクトに興味があるかもしれませんhttp://www.dev-smart.com/archives/34 ギャラリーウィジェットの中央ロックなしでAndroidにHorizo​​ntalListViewを実装する方法について説明しています

于 2011-08-22T23:42:27.550 に答える
0

手遅れかもしれませんが、AndroidにはRecylerViewがあります。これは、Listviewよりもはるかに効率的で、水平スクロールもサポートしています。

于 2015-07-22T08:10:49.540 に答える