Stworzyłem listview ze swoim layoutem i własnym adapterem rozszerzającym ArrayAdapter. Tylko teraz nie mogę dojsć jak zmienić wygląd jednego elementu gdy zostanie kliknięty/wybrany.
W onItemClick napisałe cos takiego:
MYList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
makeToast("Kliknięty: " + position);
adapter.getItem(position).wybieram();
// adapter.notifyDataSetChanged();
MYList.setAdapter(adapter);
}
});
Niby mi po kliknięciu zaznacza kliknięty element. Jednak jak kliknę np. 2 element(zostanie mu ustawiony inny layout z innym kolorem tła) i przeciągnę listę w dół to tam też jest element podświetlony. A gdy przeciągam listę znów do góry to tam jest inny element podświetlony niż kliknąłem.
Kod MainActivity.
public class MainActivity extends Activity {
private ListView MYList;
private MYBean ListMY[];
private MYAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListMY = new MYBean[]{
new MYBean("Warka", "Na stanie: 5"),
new MYBean("COS1", "parametr: 1"),
new MYBean("COS2", "parametr: 2"),
new MYBean("COS3", "parametr: 1"),
new MYBean("COS4", "parametr: 3"),
new MYBean("COS1", "parametr: 1"),
new MYBean("COS2", "parametr: 2"),
new MYBean("COS3", "parametr: 1"),
new MYBean("COS4", "parametr: 3"),
new MYBean("COS1", "parametr: 1"),
new MYBean("COS2", "parametr: 2"),
new MYBean("COS3", "parametr: 1"),
new MYBean("COS4", "parametr: 3"),
new MYBean("COS1", "parametr: 1"),
new MYBean("COS2", "parametr: 2"),
new MYBean("COS3", "parametr: 1"),
new MYBean("COS4", "parametr: 3"),
new MYBean("COS1", "parametr: 1"),
new MYBean("COS2", "parametr: 2"),
new MYBean("COS3", "parametr: 1"),
new MYBean("COS4", "parametr: 3"),
};
//ListMY[5].wybieram();
adapter = new MYAdapter(this,
R.layout.mylist_item_view_custom_list, ListMY);
MYList = (ListView) findViewById(R.id.BearListView);
MYList.setAdapter(adapter);
MYList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
makeToast("Kliknięty: " + position);
adapter.getItem(position).wybieram();
// adapter.notifyDataSetChanged();
MYList.setAdapter(adapter);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private void makeToast(String s){
Toast t = Toast.makeText(this, s, Toast.LENGTH_LONG);
t.show();
}
}
a w klasie adaptera:
public class MYAdapter extends ArrayAdapter<MYBean> {
Context ctx;
int layoutResourceId;
MYBean dane[] = null;
public MYAdapter(Context ctx, int layoutResourceId, MYBean[] dane){
super(ctx, layoutResourceId, dane);
this.layoutResourceId = layoutResourceId;
this.ctx = ctx;
this.dane = dane;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
MYBean obiekt = dane[position];
View wiersz = convertView;
uchwytWiersza uchwyt = null;
if(wiersz == null){
LayoutInflater inflanter = ((Activity)ctx).getLayoutInflater();
wiersz = inflanter.inflate(layoutResourceId, parent, false);
if(obiekt.wybrany){
wiersz = inflanter.inflate(R.layout.mylist_item_view_custom_list2, parent, false);
}
uchwyt = new uchwytWiersza();
uchwyt.MainMYView = (TextView)wiersz.findViewById(R.id.MainMYView);
uchwyt.isMYView = (TextView)wiersz.findViewById(R.id.isMYView);
wiersz.setTag(uchwyt);
}
else{
uchwyt = (uchwytWiersza)wiersz.getTag();
}
// MYBean obiekt = dane[position];
uchwyt.MainMYView.setText(obiekt.MYName);
uchwyt.isMYView.setText(obiekt.MYIs);
return wiersz;
}
static class uchwytWiersza{
TextView MainMYView;
TextView isMYView;
boolean wybrany;
}
}
Klasa MYBean:
public class MYBean {
public String MYName;
public String MYIs;
public boolean wybrany=false;
public MYBean(){
}
public MYBean(String MYName, String MYIs){
this.MYName = MYName;
this.MYIs = MYIs;
}
public void wybieram(){
wybrany=true;
}
}