Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不滚动的Android ListView?_Android_Xml_Layout_Android Listview - Fatal编程技术网

不滚动的Android ListView?

不滚动的Android ListView?,android,xml,layout,android-listview,Android,Xml,Layout,Android Listview,我正在尝试做一个类似于android market的布局……比如说在评论下面有一个看起来像是列表视图的东西,但它不滚动(整个页面滚动,但不是评论)。我不确定它是否是一个列表视图,但我想要一个类似列表视图的东西(例如,有那些分隔条等等,不能滚动)。有人建议使用线性布局而不是列表视图,但我也希望项目可以单击并打开新活动。请帮忙 我当前的布局树是这样的 <LinearLayout> <ScrollView> <RelativeLayout> 我希

我正在尝试做一个类似于android market的布局……比如说在评论下面有一个看起来像是
列表视图的东西,但它不滚动(整个页面滚动,但不是评论)。我不确定它是否是一个列表视图,但我想要一个类似列表视图的东西(例如,有那些分隔条等等,不能滚动)。有人建议使用
线性布局
而不是
列表视图
,但我也希望项目可以单击并打开新活动。请帮忙

我当前的布局树是这样的

<LinearLayout>
  <ScrollView>
     <RelativeLayout>


我希望将内容放在
RelativeLayout

中。您可以制作一个
列表视图
并将所有内容放在其中,这样整个页面都会滚动。您可以推出自己的适配器实现,但我建议使用Commonware的优秀功能
您可以使用
addView()
添加标签或分隔条,使用
addAdapter()
添加列表。查看该页面,了解更多有关用法和演示项目的信息。

正如在GoogleIo中创建listView的程序员所解释的,从来没有将listView放在滚动视图中。如果您的列表不应滚动,请使用类似线性布局的视图组,并在代码中的循环中将所有项目添加到此视图组。如果希望整行可单击,则必须使用另一个视图组作为每行的根节点,并将OnClickListener添加到此视图

示例代码:

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);
   }
}
LayoutInflater充气器=(LayoutInflater)getSystemService(Context.LAYOUT\u充气器\u SERVICE);
对于(int current=0;current

此代码将为您拥有的每个项目生成一个视图,并将其放入viewGroup。除了最后一项之外,每个项目后面都会添加一个分隔符到视图组。

我也有同样的问题。我只是用一个
setAdapter
方法扩展了默认的
LinearLayout

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();
        }
    }
}
公共类LinearList视图扩展了LinearLayout
{
适配器;
观察者=新观察者(本);
public LinearListView(上下文)
{
超级(上下文);
}
public LinearListView(上下文、属性集属性)
{
超级(上下文,attrs);
}
public LinearListView(上下文、属性集属性、int-defStyle)
{
超级(上下文、属性、定义样式);
}
公共void setAdapter(适配器适配器)
{
if(this.adapter!=null)
this.adapter.unregistedatasetobserver(observer);
this.adapter=适配器;
adapter.registerDataSetObserver(观察者);
observer.onChanged();
}
私有类Observer扩展了DataSetoObserver
{
线性主义语境;
公共观察者(LinearListView上下文)
{
this.context=上下文;
}
@凌驾
更改后的公共无效()
{
List oldViews=new ArrayList(context.getChildCount());
for(int i=0;i

希望这有帮助

我没有足够的声誉点来评论,但是对于那些在Nappy的解决方案中只有一个项目的人,请确保在布局文件中设置以下内容:

    android:orientation="vertical"

否则,看起来只添加了一个项目,但实际上它们只是水平添加的……希望这对其他人有所帮助。

谢谢=)我在弄清楚什么是布局平坦器以及如何使用它之后,最终使用了这种方法……现在我只需要用xml美化一下。快速提问……我在添加时如何突出显示视图单击它?@Kman我知道这是一篇旧文章,但你知道如何在单击子视图后突出显示它吗?如果因为行重用而在“LinearListView”中有很多项,这是个坏主意。@PaNaVTEC:行重用有什么坏处?如果convertView正在使用或未使用,这也取决于适配器,那又怎样?LinearListView没有重用行,这就是问题所在。listView将只显示可见的行,当您滚动时将重用这些行,那么内存中只有可见的行。使用LinearlistView,您在内存中拥有在适配器中填充的所有行。另外,我认为这是一个很好的解决方案,适用于一小部分行。您的解决方案将完全符合我当前的需要。但当我实现它时,我只从适配器中添加了第一项。现在,支持库允许使用
使它变得更容易。NestedScrollView可以包含任何布局,其中包含许多简单视图或回收器视图