2016-04-04 9 views
-1

Ich habe Listenansicht mit mehreren Elementen. Jede Zeile enthält Bild und Text im Zick-Zack-Verfahren Ich überprüfe die Position if ((Position% 2) == 0) Dann füge ich Bild an links und Text an rechts und sonst ich Bild rechts und Text nach links. es funktioniert ordnungsgemäß, aber wenn ich scrollen oder scrollen, dann bekomme ich ein Problem mit der Sequenz. Ich brauche wie diese enter image description hereAndroid Listview Sequenz falsch

Listview, aber wenn ich zur Listenansicht scrollen dann i wie dieses

enter image description here

public View getView(final int position, View view, ViewGroup parent) { 
    final ViewHolder holder; 
    if (view == null || view.getTag() == null) { 
     holder = new ViewHolder(); 

     view = inflater.inflate(R.layout.adapter_hotel_list_left_layout, null); 

     // get total display height and width 
     WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); 
     Display display = windowManager.getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int width = size.x; 
     int height = size.y; 

     // divide total width by 2 and store it into newWidth variable 
     int newWidth = width/2; 
     Log.d("Width-NewWidth", "" + width + "-" + newWidth); 

     int marginLeftSide = 0, marginRightTopBottomSide = 0; 

     // if Utility.deviceTypeFlag == "Tab" then user device is tab then set margins according to tab 
     if (Utility.deviceTypeFlag.equalsIgnoreCase("Tab")) { 
      float density = mContext.getResources().getDisplayMetrics().density; 
      int marginLeft = 15; 
      marginLeftSide = (int) (marginLeft * density); 
      int marginRightTopBottom = 8; 
      marginRightTopBottomSide = (int) (marginRightTopBottom * density); 
      newWidth = newWidth - (marginRightTopBottomSide * 3); 

     } else { 
      // set margins accroding to smartphone. 
      float density = mContext.getResources().getDisplayMetrics().density; 
      int marginLeft = 10; 
      marginLeftSide = (int) (marginLeft * density); 
      int marginRightTopBottom = 5; 
      marginRightTopBottomSide = (int) (marginRightTopBottom * density); 
      newWidth = newWidth - (marginRightTopBottomSide * 3); 
     } 

     // if Utility.deviceTypeFlag == "Tab" then user device is tab then set margins according to tab 
     if (Utility.deviceTypeFlag.equalsIgnoreCase("Tab")) { 
      int direction = Integer.parseInt(arrayListHotelDetails.get(position).get("directionFlag")); 
      if ((position % 2) == 0) { 
       Log.d("position", String.valueOf(position)); 

       // check position if it is even then set hotel image to left and hotel name to right. 
       holder.relativeLayout_Image = (RelativeLayout) view.findViewById(R.id.relativelayout_hll); 
       holder.imageviewHotel = (ImageView) view.findViewById(R.id.imageview_Hotel_Name_ahl); 
       RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(newWidth, Utility.relativelayout_Height); 
       layoutParams.setMargins(marginLeftSide, marginLeftSide, marginRightTopBottomSide, 0); 
       holder.relativeLayout_Image.setLayoutParams(layoutParams); 

       holder.relativeLayout_Text = (RelativeLayout) view.findViewById(R.id.relativelayout2_hll); 
       RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(newWidth, Utility.relativelayout_Height); 
       layoutParams1.setMargins(marginRightTopBottomSide, marginLeftSide, marginLeftSide, 0); 
       layoutParams1.addRule(RelativeLayout.RIGHT_OF, R.id.relativelayout_hll); 
       holder.relativeLayout_Text.setLayoutParams(layoutParams1); 

       holder.textViewHotelName = (TextView) view.findViewById(R.id.textview_Hotel_Name); 
      } else { 
       // else set hotel image to right and hotel name textview to left. 
       holder.relativeLayout_Image = (RelativeLayout) view.findViewById(R.id.relativelayout_hll); 
       holder.imageviewHotel = (ImageView) view.findViewById(R.id.imageview_Hotel_Name_ahl); 
       RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(newWidth, Utility.relativelayout_Height); 
       layoutParams.setMargins(marginRightTopBottomSide, marginLeftSide, marginLeftSide, 0); 
       layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.relativelayout2_hll); 
       holder.relativeLayout_Image.setLayoutParams(layoutParams); 

       holder.relativeLayout_Text = (RelativeLayout) view.findViewById(R.id.relativelayout2_hll); 
       RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(newWidth, Utility.relativelayout_Height); 
       layoutParams1.setMargins(marginLeftSide, marginLeftSide, marginRightTopBottomSide, 0); 
       holder.relativeLayout_Text.setLayoutParams(layoutParams1); 
       holder.textViewHotelName = (TextView) view.findViewById(R.id.textview_Hotel_Name); 
       holder.textViewHotelName.setGravity(Gravity.RIGHT); 
      } 

     } else { 
      int direction = Integer.parseInt(arrayListHotelDetails.get(position).get("directionFlag")); 
      // set margins according to smartphone 
      if ((position % 2) == 0) { 
       Log.d("position", String.valueOf(position)); 
       // check position if it is even then set hotel image to left and hotel name to right. 

       holder.relativeLayout_Image = (RelativeLayout) view.findViewById(R.id.relativelayout_hll); 
       holder.imageviewHotel = (ImageView) view.findViewById(R.id.imageview_Hotel_Name_ahl); 
       RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(newWidth, Utility.relativelayout_Height); 
       layoutParams.setMargins(marginLeftSide, marginRightTopBottomSide, marginRightTopBottomSide, marginRightTopBottomSide); 
       holder.relativeLayout_Image.setLayoutParams(layoutParams); 

       holder.relativeLayout_Text = (RelativeLayout) view.findViewById(R.id.relativelayout2_hll); 
       RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(newWidth, Utility.relativelayout_Height); 
       layoutParams1.setMargins(marginRightTopBottomSide, marginRightTopBottomSide, marginLeftSide, marginRightTopBottomSide); 
       layoutParams1.addRule(RelativeLayout.RIGHT_OF, R.id.relativelayout_hll); 
       holder.relativeLayout_Text.setLayoutParams(layoutParams1); 

       holder.textViewHotelName = (TextView) view.findViewById(R.id.textview_Hotel_Name); 
      } else { 
       // else set hotel image to right and hotel name textview to left. 
       holder.relativeLayout_Image = (RelativeLayout) view.findViewById(R.id.relativelayout_hll); 
       holder.imageviewHotel = (ImageView) view.findViewById(R.id.imageview_Hotel_Name_ahl); 
       RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(newWidth, Utility.relativelayout_Height); 
       layoutParams.setMargins(marginRightTopBottomSide, marginRightTopBottomSide, marginLeftSide, marginRightTopBottomSide); 
       layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.relativelayout2_hll); 
       holder.relativeLayout_Image.setLayoutParams(layoutParams); 

       holder.relativeLayout_Text = (RelativeLayout) view.findViewById(R.id.relativelayout2_hll); 
       RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(newWidth, Utility.relativelayout_Height); 
       layoutParams1.setMargins(marginLeftSide, marginRightTopBottomSide, marginRightTopBottomSide, marginRightTopBottomSide); 
       holder.relativeLayout_Text.setLayoutParams(layoutParams1); 
       holder.textViewHotelName = (TextView) view.findViewById(R.id.textview_Hotel_Name); 
       holder.textViewHotelName.setGravity(Gravity.RIGHT); 

      } 
     } 
     view.setTag(holder); 

    } else { 
     holder = (ViewHolder) view.getTag(); 
    } 
    // get hotel name from arraylist set it to textview. 
    holder.textViewHotelName.setText(arrayListHotelDetails.get(position).get("hotelName")); 
    Log.d("textViewHotelName adapter", arrayListHotelDetails.get(position).get("hotelName")); 
    String hotelId = ""; 
    hotelId = arrayListHotelDetails.get(position).get("hotelId"); 
    Log.d("hotelId", hotelId); 
    // set image using picasso to image view. 
    Picasso.with(mContext).load("https://s3-us-west-2.amazonaws.com/foodappdev/hotel/" + hotelId + ".jpg").placeholder(R.drawable.default_hotel).error(R.drawable.default_hotel).into(holder.imageviewHotel); 

    return view; 
} 
+0

Ihr Code extrem versaut besteht. Das gepostete Problem hängt mit der Wiederverwendbarkeit der Zeilenansicht zusammen. Ich denke, Sie sollten versuchen, Recycle View zu verwenden. Übrigens, warum setzen Sie die Ränder dynamisch? Sie können linkes und rechtes Layout in .xml erstellen und Ränder von Dimen –

Antwort

0

ich dieses Problem lösen, indem Sie diese Zeile hinzufügen

view = null; 

unten an Viewholder Erklärung

0

bekomme Hallo Ihre Bildfolge ist wie diese 0 3 4 7 8 11 12 15 16 18 19 21 so

if ((Position 2%) == 0)

0 unter Verwendung von

wird nicht genug sein versuchen, die folgende

if ((Position% 3) == 0 || (Position% 3) == 1)

dies eine Zick-Zack-Weise produzieren, die Sie für so suchen, wenn das Ergebnis von mod 0 oder 1 ist das Bild zu sehen wäre ,,

Hoffnung dies hilft

+0

einstellen, diese Antwort funktioniert nicht für mich –