返回语句被跳过

时间:2016-09-17 12:15:00

标签: java android if-statement return

我有一个Recyclerview,用于显示交易,但按日期分开。但是我的getItemViewType似乎不起作用。这是代码:

    @Override
    public int getItemViewType(int position) {
        SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
        if (mCompareDate == null || !fmt.format(mTransactions.get(mTransactionPosition).getTime()).equals(fmt.format(mCompareDate))) {
            mCompareDate = mTransactions.get(mTransactionPosition).getTime();
            return 2;
        } else {
            return 1;
        }
    }

我有一个if语句来检查一个值,但是当我运行它时,它会崩溃。我没有其他的“如果'之前的声明,但我希望它能帮助崩溃,否则其他声明应该可以正常工作。

无论如何我调试它并一步一步地观察它,程序似乎发现第一个语句是正确的,它然后在语句中做所有事情,包括'返回2;'但是之后它只是跳过返回0,这会导致崩溃,如果我没有其他的话,那么它会直接跳到else语句并返回1,也会崩溃。

编辑:修复了出现混淆问题的else if语句。

进一步编辑:因为混淆没有解决,这里是我的意思的{gif https://gyazo.com/06d2de58e7c170f0cbbf1a4e58be7ca3

3 个答案:

答案 0 :(得分:0)

如果出现以下情况,请尝试使用开关而不是多个if:无论如何       一旦返回1执行后,部分代码就是死代码,所以它不会执行..你可以使用continue和break语句来控制条件语句
     添加请发布您的异常/ logcat。

答案 1 :(得分:0)

嗯,第一个问题是,您没有正确获得else if if概念。当return 0条件一旦返回true时,其他如果未被检查。

第二个问题

一个功能只能返回一次。您将在结尾\显式返回,这是无效的。所以,你的程序崩溃了。

玩得开心

答案 2 :(得分:0)

您需要将范围0中的视图类型int返回到viewCount - 1。

;

编辑:此外,您不在方法中使用位置。 AdapterView需要向前和向后滚动,并以任何顺序访问Views。我不确定你是如何处理这种方法之外的事情,但看起来你期望适配器顺序迭代......

另一个编辑:这将需要更改适配器中的其他位置:

for(i=0;i<n;i++);

最终编辑:因为你想要的DateViews不是List中的元素,所以我建议完全忘记getItemViewType()。使用id为您的TransactionView提供与DateView相当的标题,这样您就可以将可见性设置为GONE或VISIBLE。

然后在onBindViewHolder():

    @Override
    public int getItemViewType(int position) {
    SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
    if (mCompareDate == null || !fmt.format(mTransactions.get(mTransactionPosition).getTime()).equals(fmt.format(mCompareDate))) {
        mCompareDate = mTransactions.get(mTransactionPosition).getTime();
        return 1;
    } else {
        return 0;
    }
}