【问题标题】:ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference空对象引用上的 ActionBar.setDisplayHomeAsUpEnabled(boolean)'
【发布时间】:2017-09-26 14:45:20
【问题描述】:
import android.content.Context;
import android.graphics.Color;
import android.icu.text.SimpleDateFormat;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.github.sundeepk.compactcalendarview.CompactCalendarView;
import com.github.sundeepk.compactcalendarview.domain.Event;

import java.util.Date;
import java.util.Locale;

public class Calendarpage extends AppCompatActivity {

    //modify here
    ActionBar actionBar = null;

    CompactCalendarView compactCalendar;
    private SimpleDateFormat dateFormatMonth = new SimpleDateFormat ("MMM- yyyy", Locale.getDefault());

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calendar);

        // modify here
        ActionBar myActionBar = getSupportActionBar();
        if (myActionBar != null) {
            myActionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setTitle(null);
        }

        compactCalendar = (CompactCalendarView) findViewById(R.id.compactcalendar_view);
        compactCalendar.setUseThreeLetterAbbreviation(true);

        Event ev1 = new Event(Color.RED, 1514160000L, "Chirstmas Day");
        compactCalendar.addEvent(ev1);

        compactCalendar.setListener(new CompactCalendarView.CompactCalendarViewListener() {
            @Override
            public void onDayClick(Date dateClicked) {
                Context context = getApplicationContext();

                if (dateClicked.toString().compareTo("Mon Dec 25 00:00:00 AST 2017") == 0) {
                    Toast.makeText(context, "Christmas Day", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(context, "No Events Planned That Day", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onMonthScroll(Date firstDayOfNewMonth) {
                getSupportActionBar.setTitle(String.valueOf(dateFormatMonth.format(firstDayOfNewMonth)));
            }
        });
    }
}

现在添加了您所做的更改,但 getSupportActionBar。是红色的?它只是要求我在右键单击时创建局部变量。对此非常有压力,因为在此页面正常工作之前我无法继续前进。因为我仍然需要能够将事件添加到日期

【问题讨论】:

标签: javascript java android android-studio


【解决方案1】:

尝试做出这样的改变

在您的 OnCreate 中:

    ActionBar myActionBar = getSupportActionBar();
    if (myActionBar != null) {
        myActionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setTitle(null);
    }

在你的 setListener 中

        @Override
        public void onMonthScroll(Date firstDayOfNewMonth) {
             getSupportActionBar().setTitle(String.valueOf(
             dateFormatMonth.format(firstDayOfNewMonth)));
        }

祝你好运

编辑试试这个

        compactCalendar.setListener(new CompactCalendarView.CompactCalendarViewListener() {    
            @Override
            public void onMonthScroll(Date firstDayOfNewMonth) {
                setNewTitleBar(dateFormatMonth.format(firstDayOfNewMonth));
            }
        });
    }

    private void setNewTitleBar(String newTitle) {
        getSupportActionBar().setTitle(newTitle);
    }
}

【讨论】:

  • 我现在在滑动到下个月时得到这个?
  • 您的新错误是因为 actionBar.setTitle 需要一个 String 对象并且您使用 dateFormatMonth.format(firstDayOfNewMonth) 放置一个 charSequence
  • 我在进行更改后仍然遇到相同的错误? @ClémentChameyrat
  • 现在也添加了我的 xml 文件
  • 所以我需要在这里修改它说修改的地方,因为当运行它并滑到另一个月时,它会因同样的错误而崩溃..
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2016-06-12
相关资源
最近更新 更多