首页 > 解决方案 > ContextMenuItemSelected 和一半不工作

问题描述

我正在尝试做应用程序,在其中单击一个文本并出现菜单,我可以用它来更改文本的颜色,这是有效的。我应该点击的第二个文本,菜单应该出现并将文本的样式更改为粗体、斜体或正常。但是当我点击其中任何一个时,什么都没有发生。你能帮我解决这个问题吗?谢谢!

package com.example.menu;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.ActionMode;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

import static com.example.menu.R.menu.menubarva;


public class MainActivity extends AppCompatActivity {

    MenuItem pozadi1,pozadi2,pozadi3,pozadi4;
    RelativeLayout pozadi;
    TextView styl;
    TextView barva;
    MenuItem red,blue,green;
    MenuItem normalni,tucne,kurziva;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pozadi = (RelativeLayout) findViewById(R.id.pozadi);
        pozadi1 = (MenuItem) findViewById(R.id.pozadi1);
        pozadi2 = (MenuItem) findViewById(R.id.pozadi2);
        pozadi3 = (MenuItem) findViewById(R.id.pozadi3);
        pozadi4 = (MenuItem) findViewById(R.id.pozadi4);
        styl = (TextView) findViewById(R.id.styl);
        barva = (TextView) findViewById(R.id.barva);
        red = (MenuItem) findViewById(R.id.red);
        blue = (MenuItem) findViewById(R.id.blue);
        green = (MenuItem) findViewById(R.id.green);
        normalni = (MenuItem) findViewById(R.id.normal);
        tucne = (MenuItem) findViewById(R.id.tucne);
        kurziva = (MenuItem) findViewById(R.id.kurziva);

        styl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                registerForContextMenu(styl);
                v.showContextMenu();
            }
        });

        barva.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                registerForContextMenu(barva);
                v.showContextMenu();
            }
        });

    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        if(v.getId()==R.id.styl){
            new MenuInflater(this).inflate(R.menu.menustyl,menu);
        }
        else if (v.getId()==R.id.barva){
            new MenuInflater(this).inflate(menubarva,menu);
        }
      //  MenuInflater barvy = getMenuInflater();
        //barvy.inflate(R.menu.menubarva,menu);
        //return super.onCreateContextMenu(Menu);
    }
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.blue:
                barva.setTextColor(Color.BLUE);
                return true;
            case R.id.green:
                barva.setTextColor(Color.GREEN);
                return true;
            case R.id.red:
                barva.setTextColor(Color.RED);
                return true;
            case R.id.tucne:
                styl.setTypeface(null,Typeface.BOLD);
            case R.id.kurziva:
                styl.setTypeface(null, Typeface.ITALIC);
            case R.id.normal:
                styl.setTypeface(null, Typeface.NORMAL);
            default:
                return super.onContextItemSelected(item);
        }
    }
    //KOD NA ZMĚNU POZADÍ
      //////////////////////////////////////////////////////////////////////////
   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        new MenuInflater(this).inflate(R.menu.menu1,menu);
        return super.onCreateOptionsMenu((Menu) menu);
    }
    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId()){
            case R.id.pozadi1:
                pozadi.setBackgroundResource(R.drawable.pozadi1);break;
            case R.id.pozadi2:
                pozadi.setBackgroundResource(R.drawable.pozadi2);break;
            case R.id.pozadi3:
                pozadi.setBackgroundResource(R.drawable.pozadi3);break;
            case R.id.pozadi4:
                pozadi.setBackgroundResource(R.drawable.pozadi4);break;
        }
        return super.onOptionsItemSelected(item);
    }
    ///////////////////////////////////////////////////////////////////////////////////
}

标签: javaandroid

解决方案


您忘记了开关中的中断语句

  @Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.blue:
            barva.setTextColor(Color.BLUE);
            return true;
        case R.id.green:
            barva.setTextColor(Color.GREEN);
            return true;
        case R.id.red:
            barva.setTextColor(Color.RED);
            return true;
        case R.id.tucne:
            styl.setTypeface(null,Typeface.BOLD);
            break;
        case R.id.kurziva:
            styl.setTypeface(null, Typeface.ITALIC);
            break;
        case R.id.normal:
            styl.setTypeface(null, Typeface.NORMAL);
            break;
        default:
            return super.onContextItemSelected(item);
    }
}

这应该工作


推荐阅读