3

我正在开发一个 Android 应用程序,它的一个用例是显示以下情况。

  1. 我有一个链接列表(L)。这些链接中的每一个都是 Internet 中图片的 URL;
  2. 我必须下载 (L) 的每张图片并将其显示在 ListView 中。ListView(s) 中应该有两行,我可以在其中插入图片。我想做一些类似于这个应用程序的事情;
  3. 我必须在 Horizo​​ntalScrollView 中显示图片;
  4. 图片必须按需下载,也就是说,我只是在Horizo​​ntalScrollView处于显示这张图片的位置时使用Thread下载图片(类似这种情况)。

我的问题:

  1. 是否可以在 Horizo​​ntalScrollView 中插入 ListView?(如果是,我该怎么做?)
  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 中实现水平 ListView

于 2011-08-22T23:42:27.550 回答
0

可能为时已晚,但现在 android 有了RecylerView,它比 Listview 更高效,并且还支持水平滚动。

于 2015-07-22T08:10:49.540 回答