Как установить цвет фона динамически создаваемого Textview? - PullRequest
0 голосов
/ 27 июня 2019

Я создаю динамический просмотр текста в Android.Представление создается, но когда я нажимаю на текстовое представление, я хочу установить цвет фона этого конкретного текстового представления в Android.Я пытался, но он устанавливает цвет только для последнего просмотра текста, а не для выбранного просмотра текста.

вот мой код

public class Demo extends AppCompatActivity implements View.OnClickListener {
    private LinearLayout llOptions;
    private TextView textView, tvOptionFirstQue;
    private ArrayList<String> arrayList = new ArrayList<>();
    private static final int MY_BUTTON = 9000;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_quiz_demo);
        llOptions = findViewById(R.id.llOptions);
        tvOptionFirstQue = findViewById(R.id.tvOptionFirstQue);

        for (int i = 0; i < 4; i++) {
            textView = new TextView(Demo
                    .this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

            float left = getResources().getDimension(R.dimen.common_twentyfive);
            float top = getResources().getDimension(R.dimen.common_five);
            float toppadding = getResources().getDimension(R.dimen.common_twelve);
            float right = getResources().getDimension(R.dimen.common_twentyfive);
            params.setMargins((int) left, (int) top, (int) right, 0);
            textView.setPadding(0, (int) toppadding, 0, (int) toppadding);
            textView.setTextSize(14);
            textView.setBackgroundResource(R.drawable.button_background_light_gray);
            textView.setGravity(Gravity.CENTER);
            textView.setTextColor(Color.BLACK);
            textView.setId(i);
            textView.setLayoutParams(params);
            textView.setText("test" + i);
            textView.setOnClickListener(this);
            arrayList.add(textView.getText().toString());
            this.llOptions.addView(textView);
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case 0:
                View child = llOptions.getChildAt(v.getId());
                TextView textView1 = (TextView) child;
                onFirstOptionClisk(textView1);


        }
    }

    private void onFirstOptionClisk(TextView textView) {
        textView.setBackgroundResource(R.drawable.rounded_lightblue_answer_backgroun);
        textView.setTextColor(getResources().getColor(R.color.white));
    }

Ответы [ 3 ]

0 голосов
/ 27 июня 2019

Причиной вашей проблемы является то, что вы создаете переменную класса TextView как textView, и каждый раз, когда вы ищите, только это обновляется с новой ссылкой, и в результате сохраняется только последний textView. Это тип проблемы логики.

Теперь решение состоит в том, что вы создаете новый объект вашего TextView в цикле for, поэтому различные ссылки на объекты будут добавлены в llOptions LinearLayout. Единственное, что вам нужно сделать, это удалить переменную класса для textView и создать объект каждый раз в цикле for:

public class Demo extends AppCompatActivity implements View.OnClickListener {
private LinearLayout llOptions;
private TextView tvOptionFirstQue; //Comment by Hari: textView removed from here.
private ArrayList<String> arrayList = new ArrayList<>();
private static final int MY_BUTTON = 9000;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_quiz_demo);
    llOptions = findViewById(R.id.llOptions);
    tvOptionFirstQue = findViewById(R.id.tvOptionFirstQue);

    for (int i = 0; i < 4; i++) {
        TextView textView = new TextView(Demo
                .this); //Comment by Hari: creating TextView object each time so that new reference will be created each time instead of over writing the same reference each time.
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

        //Rest are unchanged......

Надеюсь, это решит вашу проблему. Дайте мне знать ваш опыт.

0 голосов
/ 27 июня 2019

использование

textView.setBackgroundColor(Color.parseColor("#00ff00"));

вместо

textView.setBackgroundResource(R.drawable.button_background_light_gray)

будет работать

0 голосов
/ 27 июня 2019

Попробуйте это -

textView.setBackgroundResource(getResources.getColor(R.color.black));

И удалить -

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