@googlgan

Как программно изменить цвет текста в ячейке GridView Android?

У меня есть главный активити, на котором расположен GridView. В качестве содержимого ячейки GridView используется отдельный xml файл, на котором расположены TextView и ImageView. Я хочу программно менять цвет TextView в ячейке GridView при нажатию на кнопку, на главном активити.

Проект можно скачать по ссылке: Здесь

На данный момент я пытаюсь реализовать через код:

View cell = findViewById(R.layout.cellgrid);
TextView cellText = (TextView) cell.findViewById(R.id.textpart);
cellText.setTextColor(Color.parseColor("#000000"));

Но на первой же строчке получаю ошибку: Скриншот
  • Вопрос задан
  • 2298 просмотров
Решения вопроса 1
Нужно просто использовать метод GridView.getChildAt() в цикле :
public void MyButtonClick(View view) {
        int count = gridView.getChildCount();
        for (int i = 0; i < count; i++) {
            View cell = gridView.getChildAt(i);
            TextView cellText = (TextView) cell.findViewById(R.id.textpart);
            cellText.setTextColor(Color.parseColor("#FF0033"));
        }
    }


Небольшое замечание: у вас немного криво сделан Adapter, поэтому менять цвет текста будут не все ячейки.Попробуйте исправить код populating адаптера с массивом.

Полный код Activity после небольшого причёсывания:

public class MainActivity extends Activity {

private GridView gridView;
    private ImageTextAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        adapter = new ImageTextAdapter(this);
        gridView = (GridView) findViewById(R.id.gridview);
        gridView.setAdapter(adapter);
        gridView.setOnItemClickListener(gridViewOnItemClickListener);
    }

    private GridView.OnItemClickListener gridViewOnItemClickListener = new GridView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) { // пожалуйста, не комментируйте код так:

            // Sending image id to FullScreenActivity
            //Intent i = new Intent(getApplicationContext(),
            //        FullImageActivity.class);
            // passing array index
            //i.putExtra("id", position);
            //startActivity(i);
        }
    };


    public void MyButtonClick(View view) { // нарушение Code Convention в имени метода

        int count = gridView.getChildCount();
        for (int i = 0; i < count; i++) {

            View cell = gridView.getChildAt(i);
            TextView cellText = (TextView) cell.findViewById(R.id.textpart);
            cellText.setTextColor(Color.parseColor("#FF0033"));
        }


    }


}

Согласитесь, что выглядит лучше , чем :

public class MainActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageTextAdapter(this));

        gridview.setOnItemClickListener(gridviewOnItemClickListener);
    }

    private GridView.OnItemClickListener gridviewOnItemClickListener = new GridView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                                long id) {
            // TODO Auto-generated method stub

            // Sending image id to FullScreenActivity
            //Intent i = new Intent(getApplicationContext(),
            //        FullImageActivity.class);
            // passing array index
            //i.putExtra("id", position);
            //startActivity(i);
        }
    };


    public void MyButtonClick(View view)
    {
        View cell = findViewById(R.layout.cellgrid);
        TextView cellText = cell.findViewById(R.id.textpart);
                cellText.setTextColor(Color.parseColor("#000000"));
    }

}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Tiberal
MyButtonClick у вас инфлейтит новую вьюху и назначает ей цвет. Вам нужно достать вьюху из вашего gridView, и ей уже менять цвет. Ну и после поиска вьюхи findViewById, ее нужно привести к TextView
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы