
[英]switching from a CustomAdapter ListView to an standard ArrayAdapter ListView fails
[英]Resize item's height of a listview populated from CustomAdapter (ArrayAdapter<DrawerItem>)
我已经坚持了好几天了。
在我的主要活动中,我有一个列表视图包含在抽屉布局(android.support.v4.widget.DrawerLayout)中。
我创建了带有自定义项目的CustomAdapter类,并根据通过适配器添加到arraylist的项目为不同的布局充气。
我的问题如下:
-每行的高度自动设置为列表中包含的最重要项目的高度。
这就是我想要的:
-我希望每行的高度正确包装内容。..意思是在布局的底部和分隔线之间不要留一些空白。
这是我尝试没有成功的事情:
-在我的custom_drawer_item.xml中将父布局的layout_height设置为“ wrap_content”。
-在我的custom_drawer_item..xml中尝试了android:minHeight。
-在我的代码中,我尝试使用setLayoutParams()。 这是相关的部分:
dataList = new ArrayList<>();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
dataList.add(new DrawerItem(true)); // adding a spinner to the list
dataList.add(new DrawerItem("Pictures")); // adding a header to the list
dataList.add(new DrawerItem("Options & Links")); // adding a header to the list
dataList.add(new DrawerItem("Settings", R.drawable.ic_action_settings)); // adding a Link/Button to the list
dataList.add(new DrawerItem("Help", R.drawable.ic_action_help)); // adding a Link/Button to the list
dataList.add(new DrawerItem("About", R.drawable.ic_action_about)); // adding a Link/Button to the list
CustomDrawerAdapter adapter = new CustomDrawerAdapter(this, this, R.layout.custom_drawer_item, dataList);
mDrawerList.setAdapter(adapter);
View item0 = getViewByPosition(0,mDrawerList);
item0.getLayoutParams().height = 110;
View item2 = getViewByPosition(2,mDrawerList);
item2.getLayoutParams().height = 25;
View item3 = getViewByPosition(3,mDrawerList);
item3.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,25));
adapter.notifyDataSetChanged();
...
public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition ) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
---------
在此先感谢所有可以提供帮助的人:)!
---------
activiy_main.xml的相关部分:
...
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="fill_parent"
android:choiceMode="singleChoice"
android:layout_gravity="start|left"
android:listSelector="@drawable/list_selector"
android:divider="@color/Bluexxxx"
android:dividerHeight="2dp"
android:background="#ffffff"
/>
</android.support.v4.widget.DrawerLayout>
...
custom_drawer_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="10dp"
android:background="@drawable/list_selector" >
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/profileLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:background="@drawable/counter_bg_profile" >
<ImageView
android:id="@+id/picture"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginTop="0dp"
android:contentDescription="@string/profile_picture1" />
<TextView
android:id="@+id/edit_profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/picture"
android:layout_marginLeft="5dp"
android:textStyle="italic"
android:textSize="12sp" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@+id/picture"
android:orientation="vertical" >
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/user_name"
android:textStyle="italic"
android:textSize="12sp" />
<TextView
android:id="@+id/city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/age"
android:textStyle="italic"
android:textSize="12sp" />
</RelativeLayout>
</RelativeLayout>
<LinearLayout
android:id="@+id/spinnersLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:minHeight="20dp"
android:layout_marginTop="0dp" >
<RelativeLayout
android:id="@+id/spinnerLayout"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:orientation="vertical"
android:minHeight="20dp"
android:layout_marginTop="0dp" >
<TextView
android:id="@+id/current_m_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="false"
android:layout_centerHorizontal="true"
android:paddingTop="5dp"
android:text="@string/current_m_text"
android:textColor="@color/Bluexxx"
android:textSize="12sp"
android:textStyle="bold" />
<Spinner
android:id="@+id/Spinner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/current_m_text"
android:prompt="@string/prompt_c"
android:hint="@string/hint_s"
android:spinnerMode="dialog"
android:popupBackground="@color/background_material_light"
android:dropDownVerticalOffset="0dp"/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/headerLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="0dp" >
<TextView
android:id="@+id/drawer_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<LinearLayout
android:id="@+id/itemLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:orientation="vertical"
android:layout_marginTop="0dp"
android:layout_marginLeft="5dp">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="50dp" >
<ImageView
android:id="@+id/drawer_icon"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/drawer_itemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
“ CustomDrawerAdapter”类的构造方法:
public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> {
protected Context context;
protected Activity activity;
protected List<DrawerItem> drawerItemList;
protected int layoutResID;
protected String TAG = "CustomDrawerAdapter";
protected PopupWindow pWindow;
public CustomDrawerAdapter(Activity activity, Context context, int layoutResourceID, List<DrawerItem> listItems) {
super(context, layoutResourceID, listItems);
this.activity = activity;
this.context = context;
this.drawerItemList = listItems;
this.layoutResID = layoutResourceID;
}
我只是将您的custom_drawer_item.xml放入布局编辑器中,我认为是造成胃灼热的原因是:
.
.
.
<Spinner
android:id="@+id/Spinner"
android:layout_width="match_parent"
android:layout_height="match_parent"
.
.
.
高度为match_parent
,您的Spinner
正在尝试尽可能大。
您还遇到其他一些问题,例如剪切和粘贴操作在第9行出现了一个杂散的名称空间声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.