Tuesday 15 February 2011

android - change color of listview row -



android - change color of listview row -

let me explain in brief.

i have 2 fragments:

1) fragment user enters text. here have defined 5 buttons each of different colors. here, entered text added database.

2) fragment b has listview populates info database using customadapter when user click "save" button in fragment a.

everything working fine. info beingness saved, loaded listview , all. remember 5 buttons 5 different colors?

what want suppose while adding info in fragment a, user selected button color "orange" suppose, row inflated in getview() method of adapter should have background orange. (something ike google keep)

is possible?

my adapter class :

public class notesadapter extends baseadapter { arraylist<notessinglerow> notes; context context; view convertview; private static final string tag = "sampleadapter"; private final layoutinflater mlayoutinflater; private final random mrandom; private sparsebooleanarray mselecteditemsids; private static final sparsearray<double> spositionheightratios = new sparsearray<double>(); public notesadapter(context context, arraylist<notessinglerow> notes) { this.notes = notes; this.context = context; this.mlayoutinflater = layoutinflater.from(context); this.mrandom = new random(); } @override public int getcount() { homecoming notes.size(); } @override public object getitem(int position) { homecoming notes.get(position); } @override public long getitemid(int position) { homecoming 0; } @override public view getview(final int position, view convertview, final viewgroup parent) { this.convertview = convertview; viewholder vh; if (convertview == null) { convertview = mlayoutinflater.inflate(r.layout.notes_single_row, parent, false); vh = new viewholder(); convertview.settag(vh); } else { vh = (viewholder) convertview.gettag(); } vh.txtview = detail(convertview, r.id.notes_grid_text, notes.get(position).getnotes()); vh.notes_title = detail(convertview, r.id.note_title_added, notes.get(position).getnotestitle()); int len = vh.txtview.length(); if (len == 1 || len ==2){ vh.txtview.settextsize(100); } else if (len == 3){ vh.txtview.settextsize(80); } else if (len == 4){ vh.txtview.settextsize(60); } else if (len ==5){ vh.txtview.settextsize(50); } else if (len == 8){ vh.txtview.settextsize(60); } double positionheight = getpositionratio(position); vh.txtview.setheightratio(positionheight); vh.notes_title.setheightratio(positionheight); vh.notes_title.setpaintflags(vh.notes_title.getpaintflags()| paint.underline_text_flag); /* if ((position == 0 || position == 5 || position == 10 || position ==15)) { convertview.setbackgroundcolor(color.rgb(255, 112, 67)); } else if (position == 1 || position == 6 || position == 11 || position ==16) { convertview.setbackgroundcolor(color.rgb(29, 233, 182)); } else if (position == 2 || position == 7 || position == 12 || position ==17) { convertview.setbackgroundcolor(color.rgb(121, 134, 203)); } else if (position == 3 || position == 8 || position == 13 || position ==18) { convertview.setbackgroundcolor(color.rgb(205, 220, 57)); } else if (position == 4 || position == 9 || position == 14 || position ==19) { convertview.setbackgroundcolor(color.rgb(224, 64, 251)); }*/ homecoming convertview; } public void changecolortoorange() { convertview.setbackgroundcolor(color.rgb(255, 112, 67)); } static class viewholder { dynamicheighttextview txtview, notes_title; } private double getpositionratio(final int position) { double ratio = spositionheightratios.get(position, 0.0); if (ratio == 0) { ratio = getrandomheightratio(); spositionheightratios.append(position, ratio); log.d(tag, "getpositionratio:" + position + " ratio:" + ratio); } homecoming ratio; } private double getrandomheightratio() { homecoming (mrandom.nextdouble() / 2.4) + 0.8; } private dynamicheighttextview detail(view v, int resid, string text) { dynamicheighttextview tv = (dynamicheighttextview) v.findviewbyid(resid); tv.settext(text); homecoming tv; } public void toggleselection(int position) { selectview(position, !mselecteditemsids.get(position)); } public void selectview(int position, boolean value) { if (value) mselecteditemsids.put(position, value); else mselecteditemsids.delete(position); notifydatasetchanged(); }

user add together text in fragment buttons of different colors:

public class add_note_frag extends fragment implements view.onclicklistener { edittext note, notetitle; string user_note, user_note_title; button svenote; imageview ora, vio, yel, pin; relativelayout rel; actionbar ab; notesadapter adapter; private arraylist<notessinglerow> notes = new arraylist<notessinglerow>(); @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.add_notes_fragment, container, false); homecoming view; } @override public void onresume() { super.onresume(); ab = getactivity().getactionbar(); ab.setdisplayhomeasupenabled(true); rel = (relativelayout) getactivity().findviewbyid(r.id.notes_rel_lay); note = (edittext) getactivity().findviewbyid(r.id.note); notetitle = (edittext) getactivity().findviewbyid(r.id.note_title); svenote = (button) getactivity().findviewbyid(r.id.savenote); adapter = new notesadapter(getactivity(), notes); ora = (imageview) getactivity().findviewbyid(r.id.orange); vio = (imageview) getactivity().findviewbyid(r.id.violet); yel = (imageview) getactivity().findviewbyid(r.id.yellow); pin = (imageview) getactivity().findviewbyid(r.id.pink); ora.setonclicklistener(this); vio.setonclicklistener(this); yel.setonclicklistener(this); pin.setonclicklistener(this); svenote.setonclicklistener(this); } public void savenote() { tasks_database_operations tasksdatabaseoperations = new tasks_database_operations(getactivity()); user_note = note.gettext().tostring(); user_note_title = notetitle.gettext().tostring(); long id1 = tasksdatabaseoperations.insertnote(user_note, user_note_title); if (id1 < 0) { log.e("hirakdebug", "add_task_frag failed insertdata operation"); } else { log.d("hirakdebug", "data sent inserted"); } } @override public void onclick(view v) { if (v == svenote) { savenote(); gobacktonotefrag(); ab.setbackgrounddrawable(new colordrawable(getresources().getcolor(r.color.actionbar))); } if (v == ora) { rel.setbackgroundcolor(getresources().getcolor(r.color.orange)); ab.setbackgrounddrawable(new colordrawable(getresources().getcolor(r.color.orange))); adapter.changecolortoorange(); } if (v == vio) { rel.setbackgroundcolor(getresources().getcolor(r.color.violet)); ab.setbackgrounddrawable(new colordrawable(getresources().getcolor(r.color.violet))); } if (v == yel) { rel.setbackgroundcolor(getresources().getcolor(r.color.yellow)); ab.setbackgrounddrawable(new colordrawable(getresources().getcolor(r.color.yellow))); } if (v == pin) { rel.setbackgroundcolor(getresources().getcolor(r.color.pinkk)); ab.setbackgrounddrawable(new colordrawable(getresources().getcolor(r.color.pinkk))); } } public void gobacktonotefrag() { noteslistfrag nlf = new noteslistfrag(); fragmentmanager fm = getfragmentmanager(); fragmenttransaction ft = fm.begintransaction(); ft.setcustomanimations(r.anim.slide_up, r.anim.slide_down); ft.remove(this); ft.replace(r.id.dynamic_content, nlf, "nlf"); ft.commit(); } @override public void ondetach() { super.ondetach(); ab.setbackgrounddrawable(new colordrawable(getresources().getcolor(r.color.actionbar))); }

it possible.

pass selected color fragment b on button click. pass color argument adapter constructor fragment b. now know color within adapter. in getview() function of adapter, based on color, alter background color of inflated view. using : view.setbackgroundcolor(color);

see sample here : https://github.com/vishalvijay/samplecolorlistview

android listview

No comments:

Post a Comment