0

メニュー項目の通知バッジとしてTextViewが機能しています。問題は、findViewByIdメソッドは向きの変更後に常にnullを返すため、setVisibilityで可視性を変更しようとするとNullPointerExceptionがスローされることです。私はonRestartでinvalidateOptionsMenuを呼び出すことによってonCreateOptionsMenuをもう一度呼び出そうとしましたが、ヘルプが表示されません。メニュー内のTextViewは常に向き変更後にnullです

私は他のすべてのビューを見つけることができますから、それは迷惑であるこのTextViewだけです。

それがクラッシュする部分(これはのonCreateで呼び出される):TextViewには作成されますどのように

public void updateUnreadNotificationCount(final int unreadNotificationsCount) { 
    unreadNotificationCount = unreadNotificationsCount; 
    if (unreadNotificationCount == 0) { 
     notificationCounter.setVisibility(View.INVISIBLE); 
    }else { 
     notificationCounter.setVisibility(View.VISIBLE); 
     notificationCounter.setText(String.valueOf(unreadNotificationCount)); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 

    View count = menu.findItem(R.id.action_notifications).getActionView(); 
    notificationCounter = (TextView) count.findViewById(R.id.textview_notification_count); 
    count.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(mCtx, NotificationListActivity.class); 
      startActivity(i); 
     } 
    }); 
    notificationCounter.setText(String.valueOf(unreadNotificationCount)); 
    return super.onCreateOptionsMenu(menu); 
} 

メニュー項目のためのXML:

<item 
    android:id="@+id/action_notifications" 
    android:title="@string/action_notifications" 
    android:icon="@drawable/ic_mail_white_48dp" 
    android:actionLayout="@layout/actionbar_notification_icon" 
    android:showAsAction="always" 
    app:showAsAction="always" 
    android:orderInCategory="60"/> 

TextViewのアクションレイアウト:

onPrepareOptionsMenu へのTextViewの初期化を移動し、onResume() 中にinvalidateOptionsMenu()を呼び出すことによって、問題を解決するために管理
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:clickable="true" 
      style="@android:style/Widget.ActionButton"> 

<ImageView 
    android:id="@+id/imageview_notification" 
    android:src="@drawable/ic_mail_white_48dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_margin="0dp"/> 

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/textview_notification_count" 
      android:layout_width="wrap_content" 
      android:minWidth="17sp" 
      android:textSize="12sp" 
      android:textColor="#ffffffff" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:text="@null" 
      android:layout_alignTop="@id/imageview_notification" 
      android:layout_alignRight="@id/imageview_notification" 
      android:layout_marginRight="0dp" 
      android:layout_marginTop="3dp" 
      android:paddingBottom="1dp" 
      android:paddingRight="4dp" 
      android:paddingLeft="4dp" 
      android:background="@drawable/rounded_square"/> 

</RelativeLayout> 

答えて

関連する問題