2016-09-13 1 views
1

なぜこのメソッドで何らかの値が返されないというエラーが出ているのですか?方法getItemViewType()については、RecyclerView.Adapterです。私は内部の状態を確認しています。リサイクルビューアアダプターの条件付きのメソッドでreturn文が見つからない

@Override 
@ViewType 
public int getItemViewType(int position) { 
    if (!mResults.isEmpty()) { 
     if (position < mResults.size()) { 
      if (itemList.get(position) instanceof Categorizable) { 
       return TYPE_ITEM; 
      } else if (itemList.get(position) instanceof SectionHeader) { 
       return TYPE_SECTION_HEADER; 
      } 
     } else { 
      return FOOTER; 
     } 
    } else { 
     if (mFilterOption == Filter.COMPLETE || 
       mFilterOption == Filter.INCOMPLETE) { 
      if (position == 0) { 
       return NO_ITEM; 
      } else { 
       return FOOTER; 
      } 
     } else { 
      if (itemList.get(position) instanceof Categorizable) { 
       return TYPE_ITEM; 
      } else { 
       return TYPE_SECTION_HEADER; 
      } 
     } 
    } 
} 
+0

最後の値の前に戻り値を追加}。 – greenapps

+0

メソッドの最後の行にreturn NO_ITEMを追加するだけです。 –

+0

それは問題ではない、私の答えをチェックしてください。私は実際にAndroidスタジオにコードを貼り付け、修正することができました。 @greenapps – Vucko

答えて

1

私はそれを得たと思う、あなたの条件の1つはカバーされていない。最初ifを見て、私はreturn 1;を追加したところ見て、あなたはケースにreturn文が欠落していたことがあっ入るが、それは上記の2つの条件のいずれか満たさない:、もちろん

if (!mResults.isEmpty()) { 
     if (position < mResults.size()) { 
      if (itemList.get(position) instanceof Categorizable) { 
       return TYPE_ITEM; 
      } else if (itemList.get(position) instanceof SectionHeader) { 
       return TYPE_SECTION_HEADER; 
      } 
      return 1; // adding this will fix it 
     } else { 
      return FOOTER; 
     } 
    } else { 
     if (mFilterOption == Filter.COMPLETE || 
       mFilterOption == Filter.INCOMPLETE) { 
      if (position == 0) { 
       return NO_ITEM; 
      } else { 
       return FOOTER; 
      } 
     } else { 
      if (itemList.get(position) instanceof Categorizable) { 
       return TYPE_ITEM; 
      } else { 
       return TYPE_SECTION_HEADER; 
      } 
     } 
    } 

をして1を置き換えますそれがそこに戻ってくるはずの実際の価値。また、returnがある場合、実際にはほとんどの場合elseは必要ありません。 (単にアイデアを得るために)

if (a > b) return a; 
else return b; 

そして、これと比較する:この例を見てみましょう

if (a > b) return a; 
return b; 

ので、二つ目は少し読みやすくすることができ、そしてそれは同じことを行いますもの。 ifの条件が満たされた場合は、aが返されます。そうでない場合、elseの必要はありませんが、それは時代遅れです。たぶんあなたのコード内のいくつかのelseを削除すると、より明確で読みやすいものになるかもしれません。

+0

素晴らしい!将来はそれを使い始めるでしょう。 –

+0

問題はありません。楽しいコーディングをしてください。私はdaj nekiプラス私のprihvati odgovor薬局:D – Vucko

+0

ホクドルゼ、サモザコジート座った。 Ne moze odmah、znas vec。 :D –

関連する問題