相关疑难解决方法(0)

错误的convertView类型ListView的BaseAdapter

我有一个列表视图适配器使用不同类型的视图行.

大多数时候它工作正常.但是当我从列表中删除一个元素时它会崩溃.它将不正确类型的convertView发送到getView

public View getView(int position, View convertView, ViewGroup patent) ...  
Run Code Online (Sandbox Code Playgroud)

但getItemViewType返回正确的类型.

public int getItemViewType(int position)
Run Code Online (Sandbox Code Playgroud)

所以我看到的东西看起来像这样

给我位置1的类型 - >返回正确的类型(比如1)

给我一个位置1的视图,其中包含错误类型的内容视图(比如类型2)

有任何想法吗?

android listview listview-adapter

9
推荐指数
2
解决办法
3000
查看次数

获取视图被夸大的资源ID

有没有办法获取视图膨胀的布局的资源ID(如R.layout.viewtoInflate)?

我正在尝试实现一个列表视图,它使用2个自定义布局列表项.使用哪个项目布局基于用于填充列表视图的对象中的字段.

我在自定义适配器中缺少的是一种了解我在getView()中获得的'convertView'被夸大的资源的方法.如果我能得到那些信息,我可以比较并确定我是否可以重新使用转换视图,或者我是否必须用当前项目的相应布局替换它.

理想情况下,它会是这样的:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    JSONObject currItem = mItems.getJSONObject(position);

    int layoutType;

    if (currItem.getBoolean("alternate"))
        layoutType = R.layout.list_item_b;
    else
        layoutType = R.layout.list_item_a;

    if (convertView == null || <convertView.resourceID> != layoutType ) {
        convertView = inflater.inflate(layoutType, null);

        //Finish setting up new View and its holder
    }
    else {
        //Get view holder for view reuse
    }

    //populate view with the required content

    return convertView;
}
Run Code Online (Sandbox Code Playgroud)

在最坏的情况下,我根本不能重复使用视图,只是每次都需要扩展我需要的布局,但这看起来非常浪费.

android listview android-layout android-resources

5
推荐指数
1
解决办法
6841
查看次数

以编程方式将TextView添加到Listview自定义行

我想以编程方式将一个TextView添加到XML文件中声明的Linearlayout,该文件定义应用于所有listview行的自定义行.为了做到这一点,我有以下代码:

<LinearLayout
    android:id="@+id/zv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/title"
    android:layout_marginBottom="1dip"
    android:layout_marginLeft="5dip"
    android:layout_marginRight="5dip"
    android:orientation="vertical"
    android:padding="1dip" >
</LinearLayout>

class ListViewAdapter extends BaseAdapter {

(...)
public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.row, null);

        TextView tv_nz = new TextView(activity.getApplicationContext());

        LinearLayout zv = (LinearLayout)vi.findViewById(R.id.zv);

        tv_nz.setText("testing...");
        zv.addView(tv_nz);
(...)

return vi;
}
Run Code Online (Sandbox Code Playgroud)

但是TextView在每一行中出现多次.我究竟做错了什么?谢谢

android textview android-listview android-linearlayout baseadapter

0
推荐指数
1
解决办法
1万
查看次数