Использование пользовательского макета для пунктов меню панели действий Android с ClickListener - PullRequest
0 голосов
/ 03 июня 2019

Я использую пользовательский макет в качестве пункта меню. Я хочу щелкнуть элементы пользовательского макета, но во время работы произошла ошибка.Вот приведенный фрагмент:

При выполнении onPrepareOptionsMenu произошла нулевая ссылка на объект.

text_drawer_menu.xml


<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <group android:id="@+id/grp7"
        android:visible="true">
    <item
        android:id="@+id/text_drawer_horizontal"
        app:actionLayout="@layout/drawer_horizontal_items"
        android:title="Layout">

    </item>
    </group>
</menu>

hook_horizont_items.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="20dp"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_marginEnd="50dp"
    android:gravity="center"
    android:layout_marginTop="10dp"
    android:id="@+id/lin_hor_item">

<TextView
    android:id="@+id/txtUndo"
    android:layout_marginTop="0dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Undo"
    android:textSize="14sp"
    android:drawableLeft="@drawable/ic_undo_grey"
    android:drawablePadding="5dp"
    android:layout_marginStart="0dp"
    android:textColor="#000"/>
        <View
            android:layout_width="1dp"
            android:layout_height="40dp"
            android:layout_marginStart="20dp"
            android:background="#80757575"
            android:layout_marginTop="0dp"
            android:layout_toRightOf="@id/txtUndo"
            android:id="@+id/line"
            />
        <TextView
            android:id="@+id/txtRedo"
            android:layout_marginTop="0dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Redo"
            android:textSize="14sp"
            android:drawableRight="@drawable/ic_redo_grey"
            android:drawablePadding="5dp"
            android:layout_marginStart="20dp"
            android:layout_toRightOf="@id/line"
            android:textColor="#000"/>

</RelativeLayout>

TextNotes.java


TextView TxtUndo,TxtRedo;
public class TextNotes extends AppCompatActivity implements View.OnTouchListener, AdapterView.OnItemSelectedListener {

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

  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.text_note_menu,menu);
        MenuItem item = menu.findItem(R.id.text_menu_search);
        searchView.setMenuItem(item);

        return true;
//        return super.onCreateOptionsMenu(menu);
    }
@Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        RelativeLayout horizontalLayout =(RelativeLayout) menu.findItem(R.id.text_drawer_horizontal).getActionView();
        TxtUndo =(TextView) horizontalLayout.findViewById(R.id.txtUndo);
        TxtRedo=(TextView) horizontalLayout.findViewById(R.id.txtRedo);
        return super.onPrepareOptionsMenu(menu);
    }

}

Следующая ошибка возникает при выполнении соответствующей операции TextNotes.java:

2019-06-03 15:19:58.034 22876-22876/com.example.unifiednotesnew E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.unifiednotesnew, PID: 22876
    java.lang.NullPointerException: Attempt to invoke interface method 'android.view.View android.view.MenuItem.getActionView()' on a null object reference
        at com.example.unifiednotesnew.TextNotes.onPrepareOptionsMenu(TextNotes.java:768)
        at android.app.Activity.onPreparePanel(Activity.java:3253)
        at android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:559)
        at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:547)
        at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:99)
        at android.support.v7.app.AppCompatDelegateImpl$AppCompatWindowCallback.onPreparePanel(AppCompatDelegateImpl.java:2576)
        at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:99)
        at android.support.v7.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:522)
        at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:456)
        at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:56)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6316)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...