我创建了一张有一个列表视图的订单卡。最初我只显示了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。**
无法追踪可能存在的问题,任何帮助都非常有价值。
- !谢谢
答案 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;
}