3

我正在開發一個Android應用程序,它的一個用例是顯示以下情況。Android中的Horizo​​nzalScrollView中的無限列表視圖

  1. 我有一個鏈接列表(L)。這些鏈接中的每一個都是因特網中 圖片的URL;
  2. 我必須下載(L)的每張圖片並將其顯示在ListView中。 ListView中應該有兩行,我可以在其中插入圖片。我想要做類似this app;
  3. 我必須在Horizo​​ntalScrollView中顯示圖片;
  4. 圖片必須按需下載,換句話說,我只需 下載圖片使用線程Horizo​​ntalScrollView是 在顯示此圖片的位置(類似於this situation)。

我的問題:

  1. 是否有可能在插入一個Horizo​​ntalScrollView的ListView控件? (如果是,我該怎麼辦?)
  2. 如何使用Horizo​​ntalScrollView?我的意思是,在ScrollView中如何使用ListView有什麼不同?

  3. 你知道任何有相同目的的插件/項目嗎?

回答

2

問題1 - 也許你應該重新考慮你的設計中使用列表HorizonzalListView
問題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); 
} 

}

+0

如何「以編程方式創建Horizo​​ntialListView的列表,將它們放置在由垂直滾動視圖包裝的LinearLayout中」。 ? – rlc

+0

請閱讀代碼,它詳細解釋了我的答案。 – yorkw

0

可能爲時已晚,但現在Android已經RecylerView這是方式效率比ListView和還支持橫向滾動。