Использование кнопки переключения для запуска и остановки пункта меню - PullRequest
0 голосов
/ 23 октября 2018

Это код внутри моего MainActivity.java: я пытаюсь использовать кнопку-переключатель для включения и выключения пункта меню.При выборе этого пункта меню фон становится красным.Когда элемент не выбран, цвет фона по умолчанию.Я новичок в Java, поэтому я не уверен, что добавить в оператор if и else в onCheckedChange.Любые предложения помогут.Спасибо

import android.graphics.Color;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button showFragBut = (Button)findViewById(R.id.button);
        showFragBut.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){
                String butText = showFragBut.getText().toString();

                FragmentManager fg = getSupportFragmentManager();
                FragmentTransaction ft = fg.beginTransaction();

                if (butText.equals("Add fragment")){
                    Frag1 frag = new Frag1();
                    ft.add(R.id.dyframe, frag, null);
                    ft.addToBackStack(null);
                    ft.commit();
                    showFragBut.setText("Remove fragment");
                } else {
                    getSupportFragmentManager().popBackStackImmediate();
                    showFragBut.setText("Add fragment");
                }
                MenuItem redMenuItem = (MenuItem)findViewById(R.id.menu_red);

            }
        });

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        ToggleButton toggle = (ToggleButton) findViewById(R.id.toggleButton4);
        toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (isChecked) {

                } else {

                }
            }
        });


    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        ConstraintLayout mainLayout = (ConstraintLayout)findViewById(R.id.content1);
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        switch (id){
            case R.id.action_settings:
                if (item.isChecked())
                    item.setChecked(false);
                else
                    item.setChecked(true);
                Toast.makeText(getApplicationContext(), "Setting is clicked", Toast.LENGTH_LONG).show();
                return true;
            case R.id.menu_red:
                if (item.isChecked()) item.setChecked(false);
                else item.setChecked(true);
                mainLayout.setBackgroundColor(Color.RED);
                return true;
            case R.id.menu_green:
                if (item.isChecked()) item.setChecked(false);
                else item.setChecked(true);
                mainLayout.setBackgroundColor(Color.GREEN);
                return true;

        }

        return super.onOptionsItemSelected(item);
    }
}

XML:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/content1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context=".MainActivity"
        tools:showIn="@layout/activity_main">

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="128dp"
            android:layout_marginTop="116dp"
            android:text="@string/button"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Add Fragment" />

        <FrameLayout
            android:id="@+id/dyframe"
            android:layout_width="185dp"
            android:layout_height="63dp"
            android:layout_marginStart="128dp"
            android:layout_marginTop="44dp"
            android:textAlignment="center"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/button"/>

        <ToggleButton
            android:id="@+id/toggleButton4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="148dp"
            android:layout_marginBottom="110dp"
            android:text="@string/togglebutton"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    </android.support.constraint.ConstraintLayout>



<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.brettbanich.menuactivity.MainActivity">
    <group android:checkableBehavior="single" >
        <item
            android:id="@+id/menu_red"
            android:title="@string/red"
            app:showAsAction="never" />
        <item
            android:id="@+id/action_settings"
            android:orderInCategory="100"
            android:title="@string/action_settings"
            app:showAsAction="never" />
    </group>
</menu>

1 Ответ

0 голосов
/ 24 октября 2018

Я думаю, что это должно работать:

public void setColor(int color, boolean checked) {
    ConstraintLayout mainLayout = (ConstraintLayout)findViewById(R.id.content1);
    mainLayout.setBackgroundColor(color);
    redMenuItem.setChecked(checked);
}

и для переключения:

toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (isChecked) {
                    setColor(Color.GREEN, true);
                } else {
                    setColor(Color.RED, false);
                }
            }
        });

Я не уверен, поменялись ли цвета или нет, идея в чем-токак это.Я предполагаю, что код в setColor(), который вы использовали в onOptionsImetSelected(), работает так, как вы ожидаете.

...