Uma alteração no TextView se aplica a vários TextViews usando ListView e ArrayAdapter
Comecei a trabalhar em um projeto pequeno há pouco tempo, o principal objetivo é criar uma maneira de acompanhar minhas ações durante as 100 semanas.
Ainda sou um desenvolvedor iniciante para Android e encontrei um problema que não consegui explicar.
Basicamente, eu preenchi um ListView usando o ArrayAdapter com uma lista contendo 100 strings (Semana1, Semana2, Semana3 ... Semana100)
A configuração de um onclicklistener em cada um dos TextViews para que, quando um usuário clicar em uma visualização de texto, a cor do plano de fundo mude para vermelho.
Contudo; sempre que clico em uma única visualização de texto - mais de uma única visualização de texto está sendo colorida.
Notas:
Estou usando um ScrollView para rolar por toda a lista. (Depois de preenchida, a lista de 100 semanas preenche a tela inteira, a visualização de rolagem é usada para acessar a lista inteira.)
Também salvei uma referência à visualização de texto atualmente pintada para garantir que, quando um usuário clicar em uma visualização de texto diferente, a anterior perderia o fundo vermelho.
Inicialização de MainActivity:
public class MainActivity extends ActionBarActivity
{
TextView selectedWeek; // Reference to the selected week.
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateWeekList(); // Populating the ListView
initWeekClick(); // Initializing click listener
}
Preenchendo o ListView:
public void populateWeekList()
{
String[] weeks = new String [100]; // 100 weeks
for (int i=0; i<100;i++)
{
weeks[i] = "Week"+(i+1);
}
ArrayAdapter<String> weekAdapter = new ArrayAdapter<String>(
this,
R.layout.weeksview,
weeks
);
// R.id.weekTypeList is just a normal TextView.
ListView weekList=(ListView) findViewById(R.id.weekTypeList);
weekList.setAdapter(weekAdapter);
}
Código para inicializar onClickListener e salvar a referência selectedWeek:
public void initWeekClick()
{
ListView weekList=(ListView) findViewById(R.id.weekTypeList);
weekList.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id)
{
if (selectedWeek != null)
{
selectedWeek.setBackgroundColor(0);
}
TextView clicked = (TextView) viewClicked;
// Change clicked TextView color to red.
clicked.setBackgroundColor(getResources().getColor(android.R.color.holo_red_light));
// Save the selected week reference
selectedWeek = clicked;
}
});
}