Java 使用getItemViewType()-如何知道哪个布局是0,哪个是1?

Java 使用getItemViewType()-如何知道哪个布局是0,哪个是1?,java,android,listview,Java,Android,Listview,我正在覆盖项目中的getItemViewType()方法,以指示列表中的项使用哪个视图,R.layout.listview\u item\u product\u complete或R.layout.listview\u item\u product\u inprocess 我知道这个函数返回的值必须在0到1之间,小于可能的视图数,在我的例子中是0或1 我如何知道哪个布局是0,哪个是1?我假设我创建的第一个布局是0,后一个是1,但是我想返回一个变量,这样这个值是灵活的 即 在getView方法中,

我正在覆盖项目中的
getItemViewType()
方法,以指示列表中的项使用哪个视图,
R.layout.listview\u item\u product\u complete
R.layout.listview\u item\u product\u inprocess

我知道这个函数返回的值必须在0到1之间,小于可能的视图数,在我的例子中是0或1


我如何知道哪个布局是0,哪个是1?我假设我创建的第一个布局是0,后一个是1,但是我想返回一个变量,这样这个值是灵活的


getView
方法中,我可以引用什么/在哪里定义
COMPLETE\u TYPE\u INDEX
INPROCESS\u TYPE\u INDEX
的值

public View getView(int position, View convertView, ViewGroup parent) {

 if(getItemViewType(position) == INPROCESS_TYPE_INDEX){

//inflate a layout file
convertView = inflater.inflate(R.layout.R.layout.listview_item_product_inprocess);
}

else{
{

//inflate a layout file
convertView = inflater.inflate(R.layout.listview_item_product_complete);

}

return convertView;
我需要知道如何将完整的索引定义为1或0。好像是这么一件小事

老实说,
COMPLETE\u TYPE\u INDEX
是否为0和
INPROCESS\u TYPE\u INDEX
是否为1并不重要,反之亦然。但是您可以将它们定义为类变量,在这种情况下,它们也可以是
静态的
最终的

public class MyAdapter ... {
    private static final int COMPLETE_TYPE_INDEX = 0;
    private static final int INPROCESS_TYPE_INDEX = 1;
    private static final int NUMBER_OF_LAYOUTS = 2;

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            if(getItemViewType(position) == COMPLETE_TYPE_INDEX)
                convertView = mInflater.inflate(R.layout.listview_item_product_complete, null);
            else // must be INPROCESS_TYPE_INDEX
                convertView = mInflater.inflate(R.layout.listview_item_product_inprocess, null);

            // etc, etc...
            // Depending on what is different in your layouts, 
            //   you may need update your ViewHolder and more of getView()
        }

        // Load data that changes on each row, might need to check index type here too
    }
    @Override
    public int getItemViewType(int position) {
        Order thisOrder = (Order) myOrders.getOrderList().get(position);

        if(thisOrder.getOrderStatus().equals("Complete")) return COMPLETE_TYPE_INDEX;
        else return INCOMPLETE_TYPE_INDEX;
    }
    @Override
    public int getViewTypeCount() {
        return NUMBER_OF_LAYOUTS;
    }
}

“如何知道哪个布局是0,哪个布局是1?”这取决于您的数据,是什么区分了“完整”还是“正在处理”的行?(我们看不到您的数据…(我刚刚注意到您在上一个问题中的评论。由于您对Andy的答案发表了评论,因此默认情况下会通知Andy,但我没有被标记为
@Sam
,因此我没有收到通知…@Sam哦,是的,我理解这一点)。我刚刚编好了这两个变量名。我不知道如何定义它们。我制作了一个listview并添加了两个布局,如上图所示。如何在保存它们的数组中实用地标识它们的索引?(感谢您提供有关通过@回复某人的提示):)您需要此处的代码:
if(/*testforinprocess*/)
,对吗?不,我需要知道如何将
COMPLETE\u TYPE\u INDEX
定义为1或0。好像是这么一件小事!是的,这就是我打算做的。我只是不知道如何定义进程类型索引。我只是为这个例子编造了这些变量,但我需要正确地将它们赋值为0或1。但是对于操作系统,不是
R.layout。进程中的listview\u item\u product\u
专门对应于0或1吗?与
R.layout.listview\u item\u product\u complete类似
?我想我需要找出数组中保存这些布局对象的索引中的每个布局都有哪些。这就是你所需要做的,通过覆盖
getViewTypeCount()
getItemViewType()
回收器将处理剩下的工作。好的,我想我明白你的意思了。。。因此,理论上,我可以在
getView()
函数中实现
getItemViewType()
背后的逻辑。但是操作系统也可能使用这个函数,所以我需要定义它。那么,在这个函数中,我怎样才能测试inprocess的
//部分呢?我需要在
位置检查相关视图的属性,对吗?“但是操作系统也可能使用此功能,所以我需要定义它。”对,如果跳过此操作,视图回收器将无法工作。“我如何才能访问
//测试inprocess
工件?”适配器需要根据驱动适配器的数据确定此行是“完成”还是“inprocess”。根据适配器的类型,您可以使用
getItem(position)
来测试此行是哪种索引类型。好的,我想我已经得到了这一部分。现在,如果convertView不是null,但它是错误的类型,该怎么办?操作系统会处理这种情况,并且不会将错误类型的convertView传递给getView吗?
public class MyAdapter ... {
    private static final int COMPLETE_TYPE_INDEX = 0;
    private static final int INPROCESS_TYPE_INDEX = 1;
    private static final int NUMBER_OF_LAYOUTS = 2;

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            if(getItemViewType(position) == COMPLETE_TYPE_INDEX)
                convertView = mInflater.inflate(R.layout.listview_item_product_complete, null);
            else // must be INPROCESS_TYPE_INDEX
                convertView = mInflater.inflate(R.layout.listview_item_product_inprocess, null);

            // etc, etc...
            // Depending on what is different in your layouts, 
            //   you may need update your ViewHolder and more of getView()
        }

        // Load data that changes on each row, might need to check index type here too
    }
    @Override
    public int getItemViewType(int position) {
        Order thisOrder = (Order) myOrders.getOrderList().get(position);

        if(thisOrder.getOrderStatus().equals("Complete")) return COMPLETE_TYPE_INDEX;
        else return INCOMPLETE_TYPE_INDEX;
    }
    @Override
    public int getViewTypeCount() {
        return NUMBER_OF_LAYOUTS;
    }
}