一个列表视图使用不同的布局时出现问题

时间:2013-10-14 21:42:09

标签: android

我在尝试根据一个列表视图上的查询来扩充不同类型的布局时遇到问题。我使用这种类型,以便整个Activity可以包装到一个listView中,它看起来像一个可滚动的网页。我更喜欢AdapterView类型的布局,因为我必须在它们之间放置一些巨大的表,如果我使用其他类型的布局进行充气,可能会加载很晚。

我在CursorAdapter类中使用了类似的东西

public View newView(Context arg0, Cursor cur, ViewGroup parent) {
            final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            View view = null;
            int viewIndex = cur.getInt(1);
            if (viewIndex == 0)
               view = inflater.inflate(com.sayka.ordergadget.R.layout.takheader, parent, false);
            else if (viewIndex == 1)  {
                view = inflater.inflate(com.sayka.ordergadget.R.layout.activity_order_items2, parent, false);
                if (isNew) passFocus2Name((AutoCompleteTextView)view.findViewById(R.id.tak_itemName));
            }
            else if (viewIndex == 2)
                view = inflater.inflate(com.sayka.ordergadget.R.layout.tak_footer, parent, false);
            return view;
        }

问题是AdapterView似乎只是膨胀一次视图。因此,当我重新查询游标时,BindView方法会捕获空指针异常。 Cauz这次适配器试图从Layout2访问Layout1项目,因为之前Layout2就在Layout1的位置。如果出现这样的错误,我试图改变视图本身

public void bindView(View view, Context cont, Cursor cur) {
if (cur.getInt(1) == 2) {
                    TextView totItems_L, totItems_C, totItems, totQty_L, totQty_C, totQty, totAmt_L, totAmt_C, totAmt;
                    TextView testC;

                    try {
                        testC = (TextView)view.findViewById(com.sayka.ordergadget.R.id.totalItemsL);
                        testC.setText("Salim");
                    } catch (NullPointerException exp) {
                        ViewGroup parent = (ViewGroup)view.getParent();
                        final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
                        view = inflater.inflate(com.sayka.ordergadget.R.layout.tak_footer, parent, false);
                }

这里我正在尝试重新分配视图。但它不起作用。任何帮助,将不胜感激。我是android的新手。

1 个答案:

答案 0 :(得分:0)

适配器中的getItemViewType()是为了这个目的而创建的。

@Override
public int getViewTypeCount(){
    return NUMBER_OF_TYPES;
}


@Override
public int getItemViewType(int pos){
    // get your item type
    // return type int, must be less than NUMBER_OF_TYPES
}

http://developer.android.com/reference/android/widget/Adapter.html#getItemViewType(int)