Как добавить текст в TextView без замены старого текста? - PullRequest
0 голосов
/ 12 мая 2018

Как я уже упоминал в заголовке, я хочу добавить текст в Textview без замены предыдущего текста.

В моем приложении у меня есть TextView и 7 кнопок. При каждом нажатии кнопки я устанавливаю текст кнопки в TextView.

Если кнопка нажата в первый раз, Установка текста в TextView, и если эта же кнопка нажата во второй раз, я удаляю текст этой кнопки из TextView.

Здесь то, что я хочу сделать, - это 7 кнопок, которые я хочу установить в TextView (уникальность по отношению к солнцу), и когда нажата соответствующая кнопка, текст устанавливается в TextView, и если кнопка нажата 2-й раз, конкретную позицию текста следует убрать.

Здесь текст не должен заменять предыдущий текст, который важно иметь, и если некоторые кнопки выбраны и снова отменены, значит TextView должен отображать текст по умолчанию как «Никогда»

Я пытался получить источник от SO, но не могу найти четкого решения для этого.

Если кто-нибудь поможет мне выйти из этого, это будет очень полезно для меня.

кодировка

public class CreateAlarm extends Activity implements View.OnClickListener {

    private Button mbtn_Sun, mbtn_Mon, mbtn_Tue, mbtn_Wed, mbtn_Thu, mbtn_Fri, mbtn_Sat;

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

        mRepeat = (TextView) findViewById(R.id.mRepeat);

        mbtn_Sun = (Button) findViewById(R.id.mbtn_Sun);
        mbtn_Mon = (Button) findViewById(R.id.mbtn_Mon);
        mbtn_Tue = (Button) findViewById(R.id.mbtn_Tue);
        mbtn_Wed = (Button) findViewById(R.id.mbtn_Wed);
        mbtn_Thu = (Button) findViewById(R.id.mbtn_Thu);
        mbtn_Fri = (Button) findViewById(R.id.mbtn_Fri);
        mbtn_Sat = (Button) findViewById(R.id.mbtn_Sat);

        mbtn_Sun.setOnClickListener((View.OnClickListener) this);
        mbtn_Mon.setOnClickListener((View.OnClickListener) this);
        mbtn_Tue.setOnClickListener((View.OnClickListener) this);
        mbtn_Wed.setOnClickListener((View.OnClickListener) this);
        mbtn_Thu.setOnClickListener((View.OnClickListener) this);
        mbtn_Fri.setOnClickListener((View.OnClickListener) this);
        mbtn_Sat.setOnClickListener((View.OnClickListener) this);

        int hours = mTimePicker.getCurrentHour();
        mCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.mbtn_Sun:
                if (mRepeat.getText().toString().contains("Sun")) {
                    mRepeat.setText("");
                } else
                    mRepeat.setText("Sun");
                break;
            case R.id.mbtn_Mon:
                if (mRepeat.getText().toString().contains("Mon")) {
                    mRepeat.setText("");
                } else
                    mRepeat.setText("Mon");
                break;
            case R.id.mbtn_Tue:
                if (mRepeat.getText().toString().contains("Tue")) {
                    mRepeat.setText("");
                } else
                    mRepeat.setText("Tue");
                break;
            case R.id.mbtn_Wed:
                if (mRepeat.getText().toString().contains("Wed")) {
                    mRepeat.setText("");
                } else
                    mRepeat.setText("Wed");
                break;
            case R.id.mbtn_Thu:
                if (mRepeat.getText().toString().contains("Thu")) {
                    mRepeat.setText("");
                } else
                    mRepeat.setText("Thu");
                break;
            case R.id.mbtn_Fri:
                if (mRepeat.getText().toString().contains("Fri")) {
                    mRepeat.setText("");
                } else
                    mRepeat.setText("Fri");
                break;
            case R.id.mbtn_Sat:
                if (mRepeat.getText().toString().contains("Sat")) {
                    mRepeat.setText("");
                } else
                    mRepeat.setText("Sat");
                break;
            default:
                    mRepeat.setText("Never");
        }
    }
}

Изображение:

enter image description here

По умолчанию текст TextView имеет значение «Никогда».

Ответы [ 3 ]

0 голосов
/ 12 мая 2018

Мое предложение таково: использование одного TextView может сделать вашу логику довольно сложной

Вместо этого используйте горизонтальный LinearLayout, у вас будет 7 TextView с предопределенным текстом и положением. Просто покажите / скройте их в зависимости от того, какая кнопка нажата, и вам не придется иметь дело со сложным анализом строк.

0 голосов
/ 12 мая 2018

Вы можете определить TreeMap как:

private TreeMap<Integer, String> mAlarmDays = new TreeMap<>();

как поле вашего класса и добавить / удалить дни в / из TreeMap при нажатии соответствующей кнопки.Таким образом, реализация метода onClick будет:

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.mbtn_Sun:
            if (mRepeat.getText().toString().contains("Sun")) {
                mAlarmDays.remove(0);
            } else
                mAlarmDays.put(0, "Sun");
            break;
        case R.id.mbtn_Mon:
            if (mRepeat.getText().toString().contains("Mon")) {
                mAlarmDays.remove(1);
            } else
                mAlarmDays.put(1, "Mon");
            break;
        case R.id.mbtn_Tue:
            if (mRepeat.getText().toString().contains("Tue")) {
                mAlarmDays.remove(2);
            } else
                mAlarmDays.put(2, "Tue");
            break;
        case R.id.mbtn_Wed:
            if (mRepeat.getText().toString().contains("Wed")) {
                mAlarmDays.remove(3);
            } else
                mAlarmDays.put(3, "Wed");
            break;
        case R.id.mbtn_Thu:
            if (mRepeat.getText().toString().contains("Thu")) {
                mAlarmDays.remove(4);
            } else
                mAlarmDays.put(4, "Thu");
            break;
        case R.id.mbtn_Fri:
            if (mRepeat.getText().toString().contains("Fri")) {
                mAlarmDays.remove(5);
            } else
                mAlarmDays.put(5, "Fri");
            break;
        case R.id.mbtn_Sat:
            if (mRepeat.getText().toString().contains("Sat")) {
                mAlarmDays.remove(6);
            } else
                mAlarmDays.put(6, "Sat");
            break;
    }
    StringBuilder repeatDays = new StringBuilder();
    if (mAlarmDays.size() == 0) {
        repeatDays = new StringBuilder("Never");
    } else {
        for (String day:mAlarmDays.values()) {
            repeatDays.append(day).append(" ");
        }
    }
    mRepeat.setText(repeatDays.toString());
}
0 голосов
/ 12 мая 2018

Сначала вы должны установить идентификатор каждой кнопки, добавьте это в свой xml для каждой конкретной кнопки: android: id = "sun" и ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...