2

退屈なもののリストを表示するカスタムアダプタがあります。ここで、Summary(Resumen)を含む最後のアイテムを追加します。

私は2つのレイアウトと2つのビューホルダーを使用していますが、それはちょっとうまくいきます ここに画像の説明を入力してください

最初の項目にスクロールして戻ると、問題が発生します。「再開」項目(最後の項目)が消えると、アクティビティがクラッシュします。

アダプタコード(関連行)をお見せしましょう

public class AdapterListaDeudaCliente extends BaseAdapter
{
    final private int VIEW_TYPES = 2;
    final private int TIPO_FACTURA = 1;
    final private int TIPO_RESUMEN = 2;

    public int getViewTypeCount()
    {
        return VIEW_TYPES; 
    }

    public int getItemViewType(int position) 
    {
        if(position%2==0)
            return TIPO_RESUMEN;
        else
            return TIPO_FACTURA;
    }

    public int getCount()
    {
        return data.length;
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
         int tipo = getItemViewType(position);
            switch(tipo)
            {
                case TIPO_FACTURA: convertView = layoutInflater.inflate(R.layout.elemento_deuda_basico, null);
                                                 break;
                case TIPO_RESUMEN: convertView = layoutInflater.inflate(R.layout.elemento_deuda_resumen, null);
                                                 break;
            }
        return convertView;
    }
}

そして最後に、クラッシュログ:

FATAL EXCEPTION: main
java.lang.ArrayIndexOutOfBoundsException
    at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:4078)
    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2915)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:2065)
    at android.widget.ListView.onTouchEvent(ListView.java:3315)
    at android.view.View.dispatchTouchEvent(View.java:3766)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1701)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1111)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1685)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4635)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:916)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
    at dalvik.system.NativeStart.main(Native Method)

このコードがまったく機能しない場合、それは明らかなことだと思いますが、概要ビューが消えたときにのみクラッシュします...失敗を検出できません。

ありがとう!!

アダプターとレイアウトを変更します。各レイアウトは、1つのプレーンなtextViewのみで構成されています。listViewをスクロールすると、アプリがクラッシュします。

これは変です。

詳細:APIレベル8と互換性パックを使用しています。アクティビティはFragmentActivityであり、ViewPager内でlistViewを使用しています。

4

3 に答える 3

5

これは奇妙です...しかし問題はここにあります:

final private int VIEW_TYPES = 2;
final private int TIPO_FACTURA = 1;
final private int TIPO_RESUMEN = 2;

私はそれを次のように変更しました:

final private int VIEW_TYPES = 2;
final private int TIPO_FACTURA = 0;
final private int TIPO_RESUMEN = 1;

そして今それは動作します...

個人的には意味がないと思います...ビュータイプをゼロから開始する必要があるのはなぜですか?

于 2012-04-10T11:59:12.010 に答える
0

配列の長さと配列内のアイテムの数に問題があると思います。それが問題の原因です...

于 2012-04-09T14:19:46.350 に答える
0

クラッシュが発生する理由に対する答えではありませんが、本当に必要なのはフッターのようです。この例を参照してください。そうすれば、スイッチとカテゴリコードを取り除くことができます。電話をかけるに電話をかける必要があることを忘れないでください。addFooterView() setAdapter()

于 2012-04-09T14:43:17.473 に答える