How to get a non scrollable ListView?

前端 未结 6 1944
挽巷
挽巷 2020-11-28 12:49

I should want a non scrollable ListView, and show the entire ListView. It\'s because my entire screen is a ScrollView, and I dispatch widgets with a RelativeLayout, so I don

6条回答
  •  一向
    一向 (楼主)
    2020-11-28 13:28

    I came up with BaseAdapterUnscrollable. Basically it just adds views to ViewGroup container. Implementation is a bit like BaseAdapter. It’s pretty convenient if you use a few non-scrollable lists like that in you project.

    In onCreate:

     PeopleAdapter peopleAdapter = new PeopleAdapter(this, personList, containerPeopleLinearLayout);
     peopleAdapter.setOnItemClickListener(this);
     peopleAdapter.drawItems();
    

    Your specific adapter:

    public class PeopleAdapter extends BaseAdapterNonScrollable {
    
    public PeopleAdapter(Context context, List items, LinearLayout container) {
        super(context, items, container);
    }
    
    @Override
    public View getView(View container, Person person) {
        TextView textView = (TextView) LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, null);
        textView.setText(person.getName());
        return textView;
    }
    

    }

    BaseAdapterNonScrollable (just copy):

    public abstract class BaseAdapterNonScrollable implements NonScrollable, OnItemClick {
    
    public Context context;
    private ViewGroup containerViewGroup;
    private List itemObjectList;
    private OnItemClick itemClickListener;
    
    public BaseAdapterNonScrollable(Context context, List items, ViewGroup containerViewGroup) {
        this.context = context;
        this.itemObjectList = items;
        this.containerViewGroup = containerViewGroup;
    }
    
    @Override
    public void drawItems() {
        if (containerViewGroup == null || itemObjectList.size() == 0) {
            return;
        }
    
        if (containerViewGroup.getChildCount() > 0) {
            containerViewGroup.removeAllViews();
        }
    
        //draw all items
        for (int i = 0; i < itemObjectList.size(); i++) {
            final int position = i;
            final View itemView = getView(containerViewGroup, itemObjectList.get(i));
            if (itemView != null) {
                containerViewGroup.addView(itemView);
                //handle item click event
                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (itemClickListener != null) {
                            itemClickListener.onItemClick(itemObjectList, position);
                        }
                    }
                });
            }
        }
    }
    
    public void setOnItemClickListener(OnItemClick onItemClick) {
        this.itemClickListener = onItemClick;
    }
    
    public abstract View getView(View container, T itemObject);
    
    @Override
    public void onItemClick(List itemList, int position) {
    }
    

    }

    Interfaces

    public interface NonScrollable {
        void drawItems();
    }
    
    public interface OnItemClick {
        void onItemClick(List itemList, int position);
    }
    

提交回复
热议问题