繁体   English   中英

Android ListView不滚动?

[英]Android ListView that does not scroll?

我正在尝试制作一个类似于Android市场的布局...在评论中说有什么似乎是ListView但它不滚动(整个页面滚动但不是评论)。 我不确定它是否甚至是ListView但我想要一些看起来像列表视图的东西(即有那些分隔条和什么不是但不可滚动)。 有人建议使用LinearLayout而不是ListView但我也希望这些项目可以点击并打开一个新活动。 请帮忙?

我当前的布局树是这样的

<LinearLayout>
  <ScrollView>
     <RelativeLayout>

我希望将内容放在RelativeLayout

正如程序员所解释的那样,来自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);
   }
}

此代码将为您拥有的每个项生成一个View,并将其放入viewGroup。 除了最后一个项目之后,它还会向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();
        }
    }
}

希望这可以帮助!

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

    android:orientation="vertical"

此外,它似乎只添加了一个项目,但实际上它们只是水平添加...希望这有助于某人。

您可以创建一个ListView并将其全部放入其中,因此整个页面将滚动。 你可以推出自己的适配器实现,但我建议使用CommonsWare的优秀MergeAdapter您可以添加标签或分隔栏与addView()并与名单addAdapter() 有关使用情况和演示项目的更多信息,请查看该页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM