【问题标题】:How to limit ListView height on click of a button如何在单击按钮时限制 ListView 的高度
【发布时间】:2017-06-10 04:38:37
【问题描述】:

我创建了一张有一个列表视图的订单卡。最初我只显示了 2 项列表视图,但 onClick 箭头按钮我想显示完整的列表视图,之后如果我再次单击箭头,我只想显示 2 项。我能够显示完整的列表视图,但之后无法再次将其高度最小化到 100 dp,这与我之前在 xml 文件中的高度相同。

下面是我的代码,其中我有按钮并为其维护另一个适配器高度:-

       Boolean isexpand= false

    viewHolder.showhide.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        if(isexpand == true)
        {
        setListViewHeightBasedOnChildren(viewHolder.menulist);
        }

        else

        {
        setListViewHeightBasedOnChildren(100);
        }


        }

对于 listview,我正在设置另一个适配器,即 menuadapter:

 viewHolder.listview.setAdapter(new MenuAdapterForAll(mContext,menuModels));
            setListViewHeightBasedOnChildren(viewHolder.listview);

// 菜单适配器的代码

   public class MenuAdapterForAll extends BaseAdapter
     {

ArrayList<MenuItemModel> dataSet1;
Context mContextnew;
Typeface face, face1;




// View lookup cache
private static class ViewHolder {
    ImageView image_menu_type;
    TextView menu_item_name;
    TextView menu_item_price;
    TextView menu_item_qty;
    CheckBox cbmenu;
}


public MenuAdapterForAll(Context applicationContext, ArrayList<MenuItemModel> menuModels) {
    this.dataSet1=menuModels;
    this.mContextnew=applicationContext;


}

@Override
public int getCount() {
    return 2;
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}


@Override
public int getItemViewType(int position) {

    return position;
}

private int lastPosition = -1;

@Override
public View getView(int position, View vv, ViewGroup parent) {

    // View vv= LayoutInflater.from(mContextnew).inflate(R.layout.adapter_listview_menuitems, null, false);

    final ViewHolder viewHolder; // view lookup cache stored in tag
    final View result;
    final MenuItemModel data=dataSet1.get(position);

    face = Typeface.createFromAsset(mContextnew.getAssets(), "fonts/Nunito-Regular.ttf");
    face1 = Typeface.createFromAsset(mContextnew.getAssets(), "fonts/Rupee_Foradian_2.ttf");



    if (vv == null) {
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(mContextnew);
        vv = inflater.inflate(R.layout.adapter_listview_menuitems, parent, false);

        viewHolder.menu_item_name=(TextView)vv.findViewById(R.id.menu_item_name);
        viewHolder.menu_item_price=(TextView)vv.findViewById(R.id.menu_item_price);
        viewHolder.menu_item_qty=(TextView)vv.findViewById(R.id.menu_item_qty);
        viewHolder.image_menu_type =(ImageView) vv.findViewById(R.id.image_menu_type);
        viewHolder.cbmenu =(CheckBox) vv.findViewById(R.id.cbmenu);


        result=vv;
        vv.setTag(viewHolder);
    }

** 我无法在其他部分再次将高度设置为 100 dp。**

无法跟踪可能是什么问题,任何帮助都会非常有价值。

--谢谢!

【问题讨论】:

  • 你试过布局参数吗?
  • 我试过了,但是出错了。你能帮我吗,这真的很紧急@Rasi
  • 简单的方法是有两个不同的列表。一个将只有两个项目,第二个将拥有所有项目。单击时,您可以通过调用 notifyDataSetChanged 更改列表和刷新适配器。
  • 我已经这样做了,但我在每个列表项之前也有复选框,刷新后它的值会反射。因此,如果我有 2 个列表视图,并且如果我选中了列表视图的一个复选框,它将不会反映在另一个列表视图上。

标签: android listview height


【解决方案1】:

尝试使用getCountof listview 适配器类方法而不是设置高度

public int getCount() {
    return noOfRows;
}

【讨论】:

    【解决方案2】:

    我认为你应该这样做

    @Override
    public int getCount() {
        if(list.size() > 2 && !isexpand){
           return 2;
        }
        else
        {
           return list.size();
        }
    }
    

    【讨论】:

    • 我的意思是我在一个适配器中有按钮并在另一个适配器中列出。我该怎么做。
    • @MukeshMishra,您能否为您尝试设置高度的两个适配器添加一些代码?\
    • @MukeshMishra,setListViewHeightBasedOnChildren 方法中有什么?
    • 在其中我已经根据@Mayur 列表中的孩子大小进行编码以设置高度
    • @MukeshMishra,你在哪里设置了高度?给孩子?在getview()?还是其他地方?
    【解决方案3】:

    你可以这样做:

    viewHolder.showhide.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
             notifyDataSetChanged();
    
        }
    

    在适配器的getCount方法中:

      public int getCount() {
    if(!isexpand)
    return 2;
    else return yourList.size()  }
    

    【讨论】:

      【解决方案4】:

      我认为通过添加他的两种方法来解决复选框问题:

      @Override
      public int getViewTypeCount() {
      
          return getCount();
      }
      
      @Override
      public int getItemViewType(int position) {
      
          return position;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-20
        • 1970-01-01
        • 2017-10-07
        • 2014-12-03
        • 2021-12-23
        • 1970-01-01
        • 2019-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多