1

プロジェクトのメソッドをオーバーライドgetItemViewType()して、リスト内のアイテムに使用するビューを示しています。R.layout.listview_item_product_completeまたはR.layout.listview_item_product_inprocess

この関数は、可能なビューの数よりも 0 から 1 少ない値 (私の場合は 0 または 1) を返さなければならないことを知っています。

どのレイアウトが 0 で、どれが 1 かを知るにはどうすればよいですか? 私が作成した最初のレイアウトは0で、後者は1になると思いますが、この値が柔軟になるように変数を返したい...

いえ

@Override
public int getItemViewType(int position) {
    // Define a way to determine which layout to use
    if(//test for inprocess){ 
        return INPROCESS_TYPE_INDEX;
    } else { 
        return COMPLETE_TYPE_INDEX;
    }
}

COMPLETE_TYPE_INDEXとの値を定義するために何/どこを参照できますINPROCESS_TYPE_INDEXか?

4

2 に答える 2

2

COMPLETE_TYPE_INDEX を 1 または 0 として定義する方法を知る必要があります。そんな些細なことのようです!

正直、COMPLETE_TYPE_INDEX0でINPROCESS_TYPE_INDEX1でも、その逆でも構いません。ただし、それらをクラス変数として定義します。この場合、次のようにすることもできstaticますfinal

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;
    }
}
于 2012-11-09T20:40:52.020 に答える
1

あなたのgetView方法 で

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;
于 2012-11-09T20:04:00.663 に答える