I have a listview in which list item's background highlights while a notification arrives but the problem is that when I scroll the list then items changes highlighting. Suppose initially first item was listed when I scroll down then another item highlights. I have also used notifysetdatachanged.
public class NewPageActivity extends Fragment{
// this is my notification code when notifcation arrives
@Override
public void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter(
"unique_name");
mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//extract our message from intent
String msg_for_me = intent.getStringExtra("message");
//log our message value
Log.e("TAG", "onReceive: boradcast" + msg_for_me);
if (msg_for_me.contains("&")) {
String msg1[] = msg_for_me.split("&");
if (msg1[0].contains("Waiting for acceptance...")) {
edit.putInt("newTabHighlight", sp.getInt("newTabHighlight", 0) + 1);
edit.putString("newOrder", sp.getString("newOrder", null) + "&" + msg1[1].split("=")[1]);
edit.putInt("reminderTab", sp.getInt("reminderTab", 0) + 1);
edit.putInt("newOrderCount", 1);
edit.commit();
connectToDatabase();
}
}
// code for when get data through web service and set adapter
if(getActivity()!= null) {
adapter = new customadapetr_new(dataModels, getActivity(), NewPageActivity.this);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
setListViewHeightBasedOnChildren(list);
}
}
// code for adapter where background highlights
private void setNewCardBackground(final String Order_id, final RelativeLayout MenuCard, String OrderFlag)
{
Log.e("TAG", "setNewCardBackground: " );
newOrder = sp.getString("newOrder", "null");
if (newOrder.contains("&")) {
newOrderArray = newOrder.split("&");
Log.e("TAG", "setNewCardBackground:order "+newOrderArray);
for (int i = 0; i < newOrderArray.length; i++) {
if (Order_id.equals(newOrderArray[i])) {
MenuCard.setBackgroundResource(R.drawable.highlightedorder);
MenuCard.setPadding(20,10,20,10);
newOrderlength++;
break;
}
// custom adapter get view code
@Override
public View getView(final int position, View vv, ViewGroup parent) {
menuModels= new ArrayList<>();
final ViewHolder viewHolder; // view lookup cache stored in tag
final View result;
final DataModel data=dataSet.get(position);
if (vv == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(mContext);
vv = inflater.inflate(R.layout.adapter_listview_newpage_card, parent, false);
viewHolder.rupee=(TextView)vv.findViewById(R.id.rupee);
viewHolder.dateandtime=(TextView)vv.findViewById(R.id.dateandtime);
viewHolder.modeofpayment=(TextView)vv.findViewById(R.id.modeofpayment);
viewHolder.location=(TextView)vv.findViewById(R.id.location);
viewHolder.customerName=(TextView)vv.findViewById(R.id.customerName);
viewHolder.orderId = (TextView)vv.findViewById(R.id.orderId);
viewHolder.order_time = (TextView) vv.findViewById(R.id.order_time);
viewHolder.menucard = (RelativeLayout) vv.findViewById(R.id.menucard);
viewHolder.accept = (ImageView) vv.findViewById(R.id.accept);
viewHolder.statustext = (TextView)vv.findViewById(R.id.statustext);
viewHolder.orderstatus = (TextView) vv.findViewById(R.id.orderstatus);
viewHolder.order_card_layout =(RelativeLayout) vv.findViewById(R.id.order_card_layout);
viewHolder.progressBar = (PlayGifView) vv.findViewById(R.id.progressBar);
viewHolder.progressBar.setImageResource(R.drawable.renewedloader);
viewHolder.showhide =(ImageView) vv.findViewById(R.id.showhide);
viewHolder.comments = (TextView) vv.findViewById(R.id.comments);
viewHolder.expanded_menulist =(ListView) vv.findViewById(R.id.menulist1);
viewHolder.expanded_menulist.setVisibility(View.GONE);
DisplayMetrics metrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(metrics);
height = metrics.heightPixels;
width = metrics.widthPixels;
sp =mContext.getSharedPreferences("afewtaps", Context.MODE_PRIVATE);
face = Typeface.createFromAsset(mContext.getAssets(), "fonts/Nunito-Regular.ttf");
face1 = Typeface.createFromAsset(mContext.getAssets(), "fonts/Rupee_Foradian_2.ttf");
int size = dataSet.size();
String menu=data.getMenu();
viewHolder.listview=(ListView)vv.findViewById(R.id.menulist);
setListViewHeightBasedOnChildren(viewHolder.listview);
String paynt = data.getPaymemt_method();
final String order_id = data.getOrder_id();
final String Order_flag = data.getOrder_flag();
setNewCardBackground(order_id, viewHolder.menucard,Order_flag );
String orderEscalation = data.getOrder_escalated();
setEscalation(viewHolder.statustext, viewHolder.accept, viewHolder.orderstatus, order_id, orderEscalation);
int time = Integer.parseInt(data.getTimer_time());
setTime(time, viewHolder.order_time);
// menucard item
comment_value = data.getOrder_comments();
viewHolder.accept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeListItem(viewHolder.order_card_layout, position);
objNewPageActivity.SendOrder(data.getOrder_id());
}
});
viewHolder.customerName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getCustomerProfile(order_id, mContext);
}
});
try {
JSONArray jsonArray1 = new JSONArray(menu);
String orderMenu[][] = new String[jsonArray1.length()][4];
int j;
for (j = 0; j < jsonArray1.length(); j++) {
menumodel = new MenuItemModel();
JSONObject ob2 = jsonArray1.getJSONObject(j);
// String menu_name, menu_qty, menu_price;
String menu_veg_type = ob2.getString("type");
menumodel.setMenuitem_type(menu_veg_type);
String menu_name = ob2.getString("item");
menumodel.setMenuitem_name(menu_name);
String menu_qty = ob2.getString("qty");
menumodel.setMenuitem_qty(menu_qty);
String menu_price = ob2.getString("price");
menumodel.setMenuitem_price(menu_price);
menuModels.add(menumodel);
}
viewHolder.listview.setAdapter(new MyAdapter(mContext,menuModels));
setListViewHeightBasedOnChildren(viewHolder.listview);
viewHolder.expanded_menulist.setAdapter(new Expanded_Menu_Adapter(mContext,menuModels));
//setListViewHeightBasedOnChildren(viewHolder.expanded_menulist);
}catch (Exception e)
{
}
int menuArrayLenghth = menuModels.size();
if(menuArrayLenghth > 2)
{
viewHolder.showhide.setVisibility(View.VISIBLE);
}
else
{
viewHolder.showhide.setVisibility(View.GONE);
}
result=vv;
vv.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) vv.getTag();
result=vv;
}
lastPosition = position;
viewHolder.dateandtime.setText(data.getOrder_time());
viewHolder.modeofpayment.setText(data.getPaymemt_method());
viewHolder.location.setText(data.getCustomer_location());
// amount
String amounttext = "` " + data.getPrice();
SpannableStringBuilder mySpannable = new SpannableStringBuilder(amounttext);
mySpannable.setSpan(new CustomTypefaceSpan("", face1), 0, 1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
mySpannable.setSpan(new CustomTypefaceSpan("", face), 2, data.getPrice().length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
viewHolder.rupee.setText(mySpannable);
viewHolder.customerName.setText(data.getCustomer_name());
viewHolder.orderId.setText(data.getOrder_id());
if(!(comment_value.equals("0"))){
viewHolder.comments.setVisibility(View.VISIBLE);
viewHolder.comments.setText(data.getOrder_comments());
}
else
{
viewHolder.comments.setVisibility(View.GONE);
}
viewHolder.showhide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(viewHolder.listview.getVisibility() == View.VISIBLE)
{
viewHolder.expanded_menulist.setVisibility(View.VISIBLE);
viewHolder.listview.setVisibility(View.GONE);
viewHolder.showhide.setImageResource(R.drawable.blackarrrowup);
if(!(comment_value.equals("0"))){
viewHolder.comments.setVisibility(View.VISIBLE);
viewHolder.comments.setText(data.getOrder_comments());
}
else
{
viewHolder.comments.setVisibility(View.GONE);
}
}
else if(viewHolder.expanded_menulist.getVisibility() == View.VISIBLE) {
viewHolder.expanded_menulist.setVisibility(View.GONE);
viewHolder.listview.setVisibility(View.VISIBLE);
viewHolder.showhide.setImageResource(R.drawable.blackarrow);
viewHolder.comments.setVisibility(View.GONE);
}
}
});
return vv;
}
The problem could be caused by Views
being recycled by the Adapter
: when you scroll down/up the highlighted View
gets recycled and used at another position in the ListView
. You could set the background color of each View
to the default color in your adapter's getView
. This way the backround color of the recycled View
will be set to back to normal before it's displayed again.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.