如何在单击按钮时限制ListView高度

时间:2017-01-25 05:33:50

标签: android listview height

我创建了一张有一个列表视图的订单卡。最初我只显示了2项listview但是点击箭头按钮我要显​​示完整列表视图,之后如果我再次点击箭头我想只显示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。**

无法追踪可能存在的问题,任何帮助都非常有价值。

- !谢谢

4 个答案:

答案 0 :(得分:0)

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

public int getCount() {
    return noOfRows;
}

答案 1 :(得分:0)

我认为你应该这样做

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

答案 2 :(得分:0)

你可以这样做:

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()  }

答案 3 :(得分:0)

我想通过添加他的两个方法来解决复选框问题:

@Override
public int getViewTypeCount() {

    return getCount();
}

@Override
public int getItemViewType(int position) {

    return position;
}