您好我试图动态地将视图添加到线性布局。
我只需要以下
从网络服务我将获得类别名称和图片网址,并尝试使用 addview 功能将所有类别添加到水平视图下的线性布局,但仅显示最后一个类别。
请看下面的图片我需要这样的布局标有红色矩形部分,必须动态加载带图像的类别,该部分应该可以水平滚动。
我被困在这里,谢谢你的建议
答案 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);