Nikson
Nikson

Reputation: 940

How to add text to TextView without replacing the old text?

As I mentioned in the title ,I want to add text to a Textview without replacing the previous text .

In my application I have a TextView and 7 buttons .On every button click I set the text of button to the TextView.

If the button is clicked on first time ,Setting the text to TextView ,and if the same button is clicked 2nd time I am removing that button's text from TextView.

Here What I want to do is for 7 buttons I want to set positions(uniqueness for sun to sat) in TextView and when the respective button is clicked that text is set to the TextView and if the button is clicked 2nd time that specific position of the text should remove .

Here text shouldn't replace the previous text that is important to have and if some button's are selected and again that are deselected means TextView should show the default text as "Never"

I tried to get source from SO but I can't find a clear solution for this .

If anyone helps me to come out from this ,that's much helpful for me .

coding

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");
        }
    }
}

Image :

enter image description here

By default the TextView text is "Never".

Upvotes: 1

Views: 1204

Answers (3)

Abdul Wadood
Abdul Wadood

Reputation: 1171

You can define a TreeMap as:

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

as a field of your class and add/remove the days to/from the TreeMap when the corresponding button is clicked. So the implementation of onClick method will be:

@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());
}

Upvotes: 2

Tam Huynh
Tam Huynh

Reputation: 2487

My suggestion is: use a single TextView can make your logic quite complex

Use a horizontal LinearLayout instead, you will have 7 TextView inside with predefine text and position. Just simply show/hide them according to which button is clicked and you don't have to deal with any complex string analize.

Upvotes: 0

samy2k9
samy2k9

Reputation: 16

You should set each button id first,add this to your xml for each specific button : android:id="sun" and ...

Upvotes: 0

Related Questions