Как сбросить выбранный элемент в счетчике MDC (AutoCompleteTextview / ExposedDropdownMenu) нажатием кнопки - PullRequest
0 голосов
/ 24 сентября 2019

Я работаю над простым приложением для оценки бейсбола, в котором пользователь выбирает противоборствующие команды из двух выпадающих меню «Элементы дизайна материала».Пользователь отслеживает результаты, нажимая кнопку в соответствующем столбце команды.Есть кнопка сброса, которая сбрасывает все оценки обратно на «0».Я понял эту часть.Мне нужна помощь, я хочу, чтобы эта кнопка сброса также сбрасывала счетчик обратно к значению по умолчанию, показывая подсказку.Я смутно знаком с тем, как это работает с обычным вращателем, но Google отказался от вращателей в пользу AutoCompleteTextview внутри TextInputLayout в Material Design.Я наткнулся на clearListSelection (), но не совсем уверен, что правильно его реализую.Любая помощь будет принята с благодарностью.

Улучшение визуального представления приложения

MainActivity.java


import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatAutoCompleteTextView;

import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.TextView;

import com.google.android.material.internal.Experimental;

public class MainActivity extends AppCompatActivity {

    private static final String[] TEAMS_A = new String[]{
            "Arizona Diamondbacks",
            "Atlanta Braves",
            "Baltimore Orioles",
            "Boston Red Sox",
            "Chicago Cubs",
            "Chicago White Sox",
            "Cincinnati Reds",
            "Cleveland Indians",
            "Colorado Rockies",
            "Detroit Tigers",
            "Miami Marins",
            "Houston Astros",
            "Kansas City Royals",
            "Los Angeles Angels",
            "Los Angeles Dodgers",
            "Milwaukee Brewers",
            "Minnesota Twins",
            "New York Mets",
            "New York Yankess",
            "Oakland Athletics",
            "Philadelphia Phillies",
            "Pittsburgh Pirates",
            "St. Louis Cardinals",
            "San Diego Padres",
            "San Francisco Giants",
            "Seattle Mariners",
            "Tampa Bay Rays",
            "Texas Rangers",
            "Toronto Blue Jays",
            "Washington Nationals"
    };

    private static final String[] TEAMS_B = new String[]{
            "Arizona Diamondbacks",
            "Atlanta Braves",
            "Baltimore Orioles",
            "Boston Red Sox",
            "Chicago Cubs",
            "Chicago White Sox",
            "Cincinnati Reds",
            "Cleveland Indians",
            "Colorado Rockies",
            "Detroit Tigers",
            "Miami Marins",
            "Houston Astros",
            "Kansas City Royals",
            "Los Angeles Angels",
            "Los Angeles Dodgers",
            "Milwaukee Brewers",
            "Minnesota Twins",
            "New York Mets",
            "New York Yankess",
            "Oakland Athletics",
            "Philadelphia Phillies",
            "Pittsburgh Pirates",
            "St. Louis Cardinals",
            "San Diego Padres",
            "San Francisco Giants",
            "Seattle Mariners",
            "Tampa Bay Rays",
            "Texas Rangers",
            "Toronto Blue Jays",
            "Washington Nationals"
    };

    int scoreTeamA = 0;

    int scoreTeamB = 0;

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

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.dropdown_menu_popup_item, TEAMS_A);
        final AutoCompleteTextView filledExposedDropdown = findViewById(R.id.filled_exposed_dropdown_team_a);
        filledExposedDropdown.setAdapter(adapter);


        ArrayAdapter<String> adapter2 = new ArrayAdapter<>(this, R.layout.dropdown_menu_popup_item, TEAMS_B);
        final AutoCompleteTextView filledExposedDropdown2 = findViewById(R.id.filled_exposed_dropdown_team_b);
        filledExposedDropdown2.setAdapter(adapter2);

        displayForTeamA(0);
        displayForTeamB(0);
    }

    /**
     * Increase the score for Team A by 4 points.
     */
    public void addFourForTeamA(View v) {
        scoreTeamA = scoreTeamA + 4;
        displayForTeamA(scoreTeamA);
    }

    /**
     * Increase the score for Team A by 3 points.
     */
    public void addThreeForTeamA(View v) {
        scoreTeamA = scoreTeamA + 3;
        displayForTeamA(scoreTeamA);
    }

    /**
     * Increase the score for Team A by 2 points.
     */
    public void addTwoForTeamA(View v) {
        scoreTeamA = scoreTeamA + 2;
        displayForTeamA(scoreTeamA);
    }

    /**
     * Increase the score for Team A by 1 point.
     */
    public void addOneForTeamA(View v) {
        scoreTeamA = scoreTeamA + 1;
        displayForTeamA(scoreTeamA);
    }

    /**
     * Increase the score for Team B by 4 points.
     */
    public void addFourForTeamB(View v) {
        scoreTeamB = scoreTeamB + 4;
        displayForTeamB(scoreTeamB);
    }

    /**
     * Increase the score for Team B by 3 points.
     */
    public void addThreeForTeamB(View v) {
        scoreTeamB = scoreTeamB + 3;
        displayForTeamB(scoreTeamB);
    }

    /**
     * Increase the score for Team B by 2 points.
     */
    public void addTwoForTeamB(View v) {
        scoreTeamB = scoreTeamB + 2;
        displayForTeamB(scoreTeamB);
    }

    /**
     * Increase the score for Team B by 1 point.
     */
    public void addOneForTeamB(View v) {
        scoreTeamB = scoreTeamB + 1;
        displayForTeamB(scoreTeamB);
    }

    /**
     * Resets the score for both teams back to 0.
     */
    public void resetScore(View v) {
        scoreTeamA = 0;
        scoreTeamB = 0;
        displayForTeamA(scoreTeamA);
        displayForTeamB(scoreTeamB);
        clearListSelection();
    }

    /**
     * Displays the given score for Team A.
     */
    public void displayForTeamA(int score) {
        TextView scoreView = (TextView) findViewById(R.id.team_a_score);
        scoreView.setText(String.valueOf(score));
    }

    /**
     * Displays the given score for Team B.
     */
    public void displayForTeamB(int score) {
        TextView scoreView = (TextView) findViewById(R.id.team_b_score);
        scoreView.setText(String.valueOf(score));
    }


    public void clearListSelection() {
        AutoCompleteTextView filledExposedDropdown = findViewById(R.id.filled_exposed_dropdown_team_a);
        filledExposedDropdown.clearListSelection();
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:override="true">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/yankees_3_new" />

    <LinearLayout
        android:id="@+id/score_columns"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="56dp"
        android:layout_marginBottom="16dp"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/team_a_column"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="32dp"
                android:fontFamily="sans-serif-medium"
                android:gravity="center_horizontal"
                android:padding="16dp"
                android:text="@string/team_a"
                android:textColor="@android:color/white"
                android:textSize="24sp" />

            <com.google.android.material.textfield.TextInputLayout
                style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu"
                android:id="@+id/textinputlayout_teamA"
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:textColorHint="@color/text_color">

                <AutoCompleteTextView
                    android:id="@+id/filled_exposed_dropdown_team_a"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:editable="false"
                    android:ellipsize="end"
                    android:singleLine="true"
                    android:textColor="@android:color/white" />
            </com.google.android.material.textfield.TextInputLayout>

            <TextView
                android:id="@+id/team_a_score"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="24dp"
                android:fontFamily="sans-serif-medium"
                android:gravity="center_horizontal"
                android:textColor="@android:color/white"
                android:textSize="56sp"
                tools:text="0" />

            <com.google.android.material.button.MaterialButton
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="8dp"
                android:onClick="addFourForTeamA"
                android:text="@string/four_runs" />

            <com.google.android.material.button.MaterialButton
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="8dp"
                android:onClick="addThreeForTeamA"
                android:text="@string/three_runs" />

            <com.google.android.material.button.MaterialButton
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="8dp"
                android:onClick="addTwoForTeamA"
                android:text="@string/two_runs" />

            <com.google.android.material.button.MaterialButton
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="40dp"
                android:onClick="addOneForTeamA"
                android:text="@string/one_run" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="@android:color/white" />

        <LinearLayout
            android:id="@+id/team_b_column"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="32dp"
                android:fontFamily="sans-serif-medium"
                android:gravity="center_horizontal"
                android:padding="16dp"
                android:text="@string/team_b"
                android:textColor="@android:color/white"
                android:textSize="24sp" />

            <com.google.android.material.textfield.TextInputLayout
                style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu"
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:hint="@string/team_b"
                android:textColorHint="@color/text_color">

                <AutoCompleteTextView
                    android:id="@+id/filled_exposed_dropdown_team_b"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:editable="false"
                    android:ellipsize="end"
                    android:singleLine="true"
                    android:textColor="@android:color/white" />
            </com.google.android.material.textfield.TextInputLayout>

            <TextView
                android:id="@+id/team_b_score"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="24dp"
                android:fontFamily="sans-serif-medium"
                android:gravity="center_horizontal"
                android:textColor="@android:color/white"
                android:textSize="56sp"
                tools:text="0" />

            <com.google.android.material.button.MaterialButton
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="8dp"
                android:onClick="addFourForTeamB"
                android:text="@string/four_runs" />

            <com.google.android.material.button.MaterialButton
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="8dp"
                android:onClick="addThreeForTeamB"
                android:text="@string/three_runs" />

            <com.google.android.material.button.MaterialButton
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="8dp"
                android:onClick="addTwoForTeamB"
                android:text="@string/two_runs" />

            <com.google.android.material.button.MaterialButton
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"

                android:layout_marginBottom="40dp"
                android:onClick="addOneForTeamB"
                android:text="@string/one_run" />
        </LinearLayout>

    </LinearLayout>

    <com.google.android.material.button.MaterialButton
        android:id="@+id/reset_button"
        android:layout_width="128dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/score_columns"
        android:layout_centerHorizontal="true"
        android:onClick="resetScore"
        android:text="@string/reset_button" />

    <com.google.android.material.button.MaterialButton
        android:id="@+id/reset_button_teamA"
        android:layout_width="128dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/reset_button"
        android:layout_centerHorizontal="true"
        android:onClick="resetScore"
        android:text="@string/reset_button" />

</RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Когда вы впервые запускаете свое приложение, ваши счетчики отображают «Team A» или «Team B», потому что вы определили их как строковые ресурсы, а затем сослались на них в вашем XML-файле как android: text = "@ string / team_b".Вращающиеся будут продолжать показывать команду A или B, пока вы не коснетесь их.Как только вы прикоснетесь к ним, он начнет перезаписывать определение xml.

Есть несколько способов решить эту проблему, но я бы просто восстановил счетчики.

В коде вашей деятельности используйте метод, называемый"populateSpinnerA ()" и вызовите этот метод в своем выражении onCreate, а не жестко закодируйте счетчики.Затем, когда вы нажимаете кнопку сброса, снова вызовите метод populateSpinnerA (), чтобы полностью воссоздать счетчик с нуля с исходной ссылкой на строку.

0 голосов
/ 24 сентября 2019

Вы можете просто использовать метод Spinner.setSelection (int position) и передать 0 для первого элемента

...