Kma*_*man 16 xml layout android android-listview
我正在尝试制作一个类似于Android市场的布局...在评论中说有什么似乎是一个ListView但它不滚动(整个页面滚动而不是评论).我不确定它是否甚至是ListView但我想要一些看起来像列表视图的东西(即有那些分隔条和什么不是但不可滚动).有人建议使用a LinearLayout而不是a,ListView但我也希望这些项目可以点击并打开一个新活动.请帮忙?
我当前的布局树是这样的
<LinearLayout>
<ScrollView>
<RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我希望把内容放在里面RelativeLayout.
Jan*_*usz 28
正如程序员所解释的那样,来自GoogleIo的视频中的listView 从未将ListView放在滚动视图中.如果列表不应滚动,请使用类似线性布局的ViewGroup,并在代码的循环中将所有项添加到此ViewGroup.如果希望整行可以单击,则必须使用另一个ViewGroup作为每行的根节点,并将OnClickListener添加到此View.
示例代码:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int current = 0; current < itemCount; current++) {
View view = inflater.inflate(R.layout.layout_id, parent, false);
//initialize the view
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), CLASS_TO_START)
startActivity(intent);
}
});
viewGroup.addView(view);
if (current < itemCount - 1) {
inflater.inflate(R.layout.line, viewGroup);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码将为您拥有的每个项生成一个View,并将其放入viewGroup.除了最后一个项目之后,它还会向viewGroup添加一个分隔符.
Nap*_*ppy 14
我遇到过同样的问题.我只是LinearLayout用一个setAdapter方法扩展了默认值:
public class LinearListView extends LinearLayout
{
Adapter adapter;
Observer observer = new Observer(this);
public LinearListView(Context context)
{
super(context);
}
public LinearListView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public LinearListView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
public void setAdapter(Adapter adapter)
{
if (this.adapter != null)
this.adapter.unregisterDataSetObserver(observer);
this.adapter = adapter;
adapter.registerDataSetObserver(observer);
observer.onChanged();
}
private class Observer extends DataSetObserver
{
LinearListView context;
public Observer(LinearListView context)
{
this.context = context;
}
@Override
public void onChanged()
{
List<View> oldViews = new ArrayList<View>(context.getChildCount());
for (int i = 0; i < context.getChildCount(); i++)
oldViews.add(context.getChildAt(i));
Iterator<View> iter = oldViews.iterator();
context.removeAllViews();
for (int i = 0; i < context.adapter.getCount(); i++)
{
View convertView = iter.hasNext() ? iter.next() : null;
context.addView(context.adapter.getView(i, convertView, context));
}
super.onChanged();
}
@Override
public void onInvalidated()
{
context.removeAllViews();
super.onInvalidated();
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!