我有一个列表视图适配器使用不同类型的视图行.
大多数时候它工作正常.但是当我从列表中删除一个元素时它会崩溃.它将不正确类型的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)
有任何想法吗?
有没有办法获取视图膨胀的布局的资源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)
在最坏的情况下,我根本不能重复使用视图,只是每次都需要扩展我需要的布局,但这看起来非常浪费.
我想以编程方式将一个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