动态水平视图

时间:2014-09-29 12:24:18

标签: android android-layout android-linearlayout android-adapter horizontalscrollview

您好我试图动态地将视图添加到线性布局。

  

我只需要以下

从网络服务我将获得类别名称和图片网址,并尝试使用 addview 功能将所有类别添加到水平视图下的线性布局,但仅显示最后一个类别。

  

请看下面的图片我需要这样的布局标有红色矩形部分,必须动态加载带图像的类别,该部分应该可以水平滚动。

我被困在这里,谢谢你的建议

enter image description here

2 个答案:

答案 0 :(得分:2)

  

创建自定义水平列表视图,如下所示     并将您的适配器类绑定到它

 package com.sujith.custom_layout;
import android.content.Context;
import android.database.DataSetObserver;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Adapter;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.FrameLayout.LayoutParams;

public class GalleryHorizontal extends HorizontalScrollView{

private LinearLayout.LayoutParams defaultTabLayoutParams;
private LinearLayout.LayoutParams expandedTabLayoutParams;


private LinearLayout tabsContainer;
 private Adapter adapter;
 private DataSetObserver dataSetObserver=new DataSetObserver() {

        @Override
        public void onChanged() {
            // TODO Auto-generated method stub
            super.onChanged();
             reloadChildViews();
        }

    };
public GalleryHorizontal(Context context) {
    this(context, null);
    // TODO Auto-generated constructor stub
}

public GalleryHorizontal(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
    // TODO Auto-generated constructor stub
}

public GalleryHorizontal(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // TODO Auto-generated constructor stub

    setFillViewport(true);
//      setWillNotDraw(false);

    tabsContainer = new LinearLayout(context);
    tabsContainer.setOrientation(LinearLayout.HORIZONTAL);
    tabsContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    addView(tabsContainer);



}
public void setAdapter(Adapter adapter) {
    if (this.adapter == adapter) return;
    this.adapter = adapter;
    if (adapter != null) adapter.registerDataSetObserver(dataSetObserver);
    reloadChildViews();
}

private void reloadChildViews() {
    tabsContainer.removeAllViews();
      if (adapter == null) return;
      int count = adapter.getCount();
      for (int position = 0; position < count; ++position) {
            View v = adapter.getView(position, null, this);
            if (v != null){

                tabsContainer.addView(v);

            }
        }

      tabsContainer.requestLayout();

}

}

答案 1 :(得分:1)

简单创建自定义水平列表视图。使用此方法生成列表视图并使用数组适配器设置数据

这是我的工作示例enter link description here

布局xml中的

<com.jeekiarn.horizontal_listview.HorizoantalListView
    android:id="@+id/hlvSimpleList"
    android:layout_width="match_parent"
    android:layout_height="50dp" />


mHlvSimpleList = (HorizoantalListView) findViewById(R.id.hlvSimpleList);
    CustomArrayAdapter adapter = new CustomArrayAdapter(this, mCustomData);

    // Assign adapter to HorizontalListView
    mHlvSimpleList.setAdapter(adapter);
    mHlvSimpleList.setAdapter(adapter);