我正在尝试在listView中间添加一个按钮。理想情况下,按钮将拆分listView,然后它会继续,但如果不可能,我可以使用listView中一行内的按钮。 例如。我的列表视图将包含第一行(图像+文本),第二行(图像+文本),按钮,然后继续列表视图。
我写了以下代码。这会在listView中为行添加一个按钮,但在路上它还会向listView中的每一行添加一个空按钮(带有现在文本的按钮)。此外,中心的重力设置不起作用。
我的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ImageView android:id="@+id/imgUserIcon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:gravity="center_vertical"
android:scaleType="fitStart" />
<Button
android:id="@+id/buttonShowHide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/showHide" />
<TextView android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
/>
</LinearLayout>
我的适配器
public class UserAdapter extends ArrayAdapter<UserAccountData> {
Context context;
int layoutResourceId;
User data[] = null;
public UserAdapter(Context context, int layoutResourceId,
UserAccountData[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
UserAccountDataHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new UserAccountDataHolder();
holder.imgIcon = (ImageView) row.findViewById(R.id.imgUserIcon);
holder.txtTitle = (TextView) row.findViewById(R.id.txtTitle);
holder.showHide = (Button) row.findViewById(R.id.buttonShowHide);
row.setTag(holder);
} else {
holder = (UserHolder) row.getTag();
}
User user = data[position];
holder.txtTitle.setText(user.title);
holder.imgIcon.setImageResource(user.icon);
holder.showHide.setText(user.buttonName);
return row;
}
static class UserHolder {
ImageView imgIcon;
TextView txtTitle;
Button showHide;
}
}
我的行的Java对象。我创建了两个构造函数,一个用于按钮,另一个用于图像和文本。
public class UserAccountData {
public int icon;
public String type;
public String title;
public CharSequence buttonName;
public UserAccountData(){
super();
}
// for image and text
public UserAccountData(int icon, String title, String type) {
super();
this.icon = icon;
this.title = title;
this.type = type;
}
// for button
public UserData(CharSequence buttonName, String type) {
super();
this.buttonName = buttonName;
this.type = type;
}
public void setType(String type){
this.type = type;
}
}
在我的活动中,我将以下两行添加到数组中,稍后我的适配器将用于创建listView(我将其传递给更改为数组的ArrayList)
user_data.add(new UserAccountData(icon, "title,"type"));
user_data.add(new UserAccountData("show Password","button"));
a)有没有办法分割listView和中间只需添加一个按钮?并继续相同的listView?因为我当前的解决方案试图在一行中添加一个按钮。
b)为什么我实际上还在图标,标题类型行中添加一个空按钮的任何想法? 我在实际listView上获得了图标,标题,空按钮
非常感谢
更新: 找到两个博客 http://logc.at/2011/10/10/handling-listviews-with-multiple-row-types/ 和 http://android.amberfog.com/?p=296 ,但仍然没有任何运气。希望得到一些更深入的帮助
答案 0 :(得分:3)
有没有办法拆分listView和中间,只需添加一个按钮?并继续相同的listView?因为我当前的解决方案试图在一行中添加一个按钮。
如果我理解你的问题,你想要的是:
我的列表视图将包含:
- 图片+文字
- 图片+文字
- 按钮
- 图片+文字
等...
如果您覆盖getViewTypeCount()
和getItemViewType()
,则可以有多种类型的行布局。
getViewTypeCount()
应返回类型数量,在本例中为2. getItemViewType(int position)
将返回position
处的行的类型,在这种情况下为0或1。添加
我真的不知道如何区分图像文本行和按钮。我试图找到一种方法来查看我的图像是否为null(使用第二个构造函数),但这似乎不起作用
这听起来不错,但由于icon
是int
,它永远不会是null
,未初始化整数的默认值为0.尝试:
@Override
public int getItemViewType(int position) {
UserAccountData data = getItem(position);
if(data.icon == 0)
return 1;
return 0;
// The same thing in one line:
//return getItem(position).icon == 0 ? 1 : 0;
}