Android ListView不滚动?

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添加一个分隔符.

  • 快速问题...当我点击它时如何使视图突出显示? (4认同)

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)

希望这可以帮助!

  • 您的解决方案完全符合我目前的需求.但是当我实现它时,我只从我的适配器中添加了第一个项目. (2认同)