2013-11-29 93 views
0

這裏是列表項我的getter setter方法代碼:問題自定義列表

Java代碼:

package com.example.listrestaurant; 



public class Restaurant { 

    private String RestaurantName; 

    private String RestaurantLocation; 
    private String restaurantCusine;  
    private String rating; 
    private int iconID; 
    public Restaurant(int iconID,String RestaurantName,String restaurantCusine,String RestaurantLocation, String rating) { 
     super(); 
     this.RestaurantName = RestaurantName; 
     this.restaurantCusine = restaurantCusine; 
     this.RestaurantLocation = RestaurantLocation; 
     this.rating=rating; 
     this.iconID=iconID; 
    } 
    public String getRestaurantName() { 
     return RestaurantName; 
    } 
    public void setRestaurantName(String restaurantName) { 
     RestaurantName = restaurantName; 
    } 
    public String getRestaurantLocation() { 
     return RestaurantLocation; 
    } 
    public void setRestaurantLocation(String restaurantLocation) { 
     RestaurantLocation = restaurantLocation; 
    } 
    public String getRestaurantCusine() { 
     return restaurantCusine; 
    } 
    public void setRestaurantCusine(String restaurantCusine) { 
     this.restaurantCusine = restaurantCusine; 
    } 
    public String getRating() { 
     return rating; 
    } 
    public void setRating(String rating) { 
     this.rating = rating; 
    } 
    public int getIconID() { 
     return iconID; 
    } 
    public void setIconID(int iconID) { 
     this.iconID = iconID; 
    } 




} 
用於顯示列表項

Java代碼:

package com.example.listrestaurant; 


import java.util.ArrayList; 
import java.util.List; 

import android.R.color; 
import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.LinearLayout.LayoutParams; 
import android.widget.ListView; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    int count=0; 

     String ArrayColor[]={"DE1D0F","FC3B2D","FF7668","EFD816","FAE321","EDD614","9ACD32","689543","305D02","305D00"}; 

private List<Restaurant> restaurantList=new ArrayList<Restaurant>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     populateCarList(); 
     populateListView(); 
    } 
private void populateCarList(){ 
    restaurantList.add(new Restaurant(R.drawable.ic_launcher,"Rese","Restaurant Cusine","Resturant Location","3.5")); 
    restaurantList.add(new Restaurant(R.drawable.ic_launcher,"Rest","Restaurant Cusine","Resturant Location","6.3")); 
    restaurantList.add(new Restaurant(R.drawable.ic_launcher,"Rest","Restaurant Cusine","Resturant Location","2.3")); 
    restaurantList.add(new Restaurant(R.drawable.ic_launcher,"Rest","Restaurant Cusine","Resturant Location","9.6")); 
    restaurantList.add(new Restaurant(R.drawable.ic_launcher,"Rese","Restaurant Cusine","Resturant Location","3.5")); 
    restaurantList.add(new Restaurant(R.drawable.ic_launcher,"Rest","Restaurant Cusine","Resturant Location","6.3")); 
    restaurantList.add(new Restaurant(R.drawable.ic_launcher,"Rest","Restaurant Cusine","Resturant Location","2.3")); 
    restaurantList.add(new Restaurant(R.drawable.ic_launcher,"Rest","Restaurant Cusine","Resturant Location","9.6")); 

} 
private void populateListView(){ 
    ArrayAdapter<Restaurant> adapter =new MyListAdapter(); 
    ListView list=(ListView)findViewById(R.id.listView1); 
    list.setAdapter(adapter);; 
} 
private class MyListAdapter extends ArrayAdapter<Restaurant>{ 
    public MyListAdapter(){ 
     super(MainActivity.this,R.layout.item_view,restaurantList);; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //Make sure we have a view to work with (may have been given null) 
     Log.d("Position:", " "+position); 
     View itemView = convertView; 

     if(itemView == null){ 
      itemView = getLayoutInflater().inflate(R.layout.item_view, parent,false); 
     } 

     //find the Car to work with 
     Restaurant restaurantGetSetData=restaurantList.get(position); 

     ImageView restaurantImage_restList_iv=(ImageView)itemView.findViewById(R.id.restaurantImage_restList_iv); 
     restaurantImage_restList_iv.setImageResource(restaurantGetSetData.getIconID()); 

     TextView restaurantName_restList_tv=(TextView)itemView.findViewById(R.id.restaurantName_restList_tv); 
     restaurantName_restList_tv.setText(restaurantGetSetData.getRestaurantName()+"count:"+count++); 

     TextView restaurantCusine_restList_tv=(TextView)itemView.findViewById(R.id.restaurantCusine_restList_tv); 
     restaurantCusine_restList_tv.setText(restaurantGetSetData.getRestaurantCusine()); 

     TextView restaurantLocation_restList_tv=(TextView)itemView.findViewById(R.id.restaurantLocation_restList_tv); 
     restaurantLocation_restList_tv.setText(restaurantGetSetData.getRestaurantLocation()); 


     TextView restaurantRating_restList_tv=(TextView)itemView.findViewById(R.id.restaurantRating_restList_tv); 
     restaurantRating_restList_tv.setText(restaurantGetSetData.getRating()); 
     String rate=restaurantGetSetData.getRating(); 
     restaurantRating_restList_tv.setBackgroundColor(Color.parseColor("#"+ArrayColor[(int) Float.parseFloat(rate)])); 



     //-----------------------slot and offer-------------------------------------------------- 

     Typeface typeface = Typeface.createFromAsset(getBaseContext().getAssets(), 
       "helvetica_reg.ttf"); 
     LayoutParams params = new LayoutParams(
       LayoutParams.WRAP_CONTENT,  
       LayoutParams.WRAP_CONTENT 
     ); 
     LayoutParams layout=new LayoutParams(LayoutParams.WRAP_CONTENT,  
       LayoutParams.WRAP_CONTENT); 
      layout.setMargins(5, 0, 5, 0); 
      params.setMargins(0, 10, 0, 10); 
     LinearLayout rl=(LinearLayout)itemView.findViewById(R.id.restaurantSlotOffer_restList_tv); 


     for(int j=0;j<8;j++) 
     { 
      LinearLayout l=new LinearLayout(getApplicationContext()); 
      l.clearDisappearingChildren(); 
      l.setLayoutParams(layout); 
      l.setOrientation(LinearLayout.VERTICAL); 
      TextView time=new TextView(getApplicationContext()); 
      time.setBackgroundColor(getResources().getColor(R.color.out_gray)); 
      time.setTextColor(Color.BLACK); 
      time.setTextSize(getApplicationContext().getResources().getDimensionPixelSize(R.dimen.custom_text_size)); 
      time.setGravity(Gravity.CENTER); 
      time.setLayoutParams(new LayoutParams(90, LayoutParams.WRAP_CONTENT)); 
      time.setPadding(2,2,2,2); 
      View v1=new View(getApplicationContext()); 
      v1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 1)); 
      v1.setBackgroundColor(color.white); 
      TextView deal=new TextView(getContext()); 
      deal.setLayoutParams(new LayoutParams(90, LayoutParams.WRAP_CONTENT)); 
      deal.setGravity(Gravity.CENTER); 
      deal.setTextSize(getApplicationContext().getResources().getDimensionPixelSize(R.dimen.custom_text_size)); 
      deal.setPadding(2,2,2,2); 
      deal.setTextColor(getResources().getColor(R.color.our_red)); 
      deal.setBackgroundColor(getResources().getColor(R.color.out_gray)); 
      time.setTypeface(typeface); 

      //Log.d("slot from info anshul:", slot.get(j)+"\n"); 
      //time code 
      /*{ 
       String hour=slot.get(j).substring(0, 2); 
       String min=slot.get(j).substring(3,5); 
       if(hour.equals("--")){ 
        Log.d("hour is ", "-------"); 
        time.setText("--:--"); 
       }else{ 
        int hourInt=Integer.parseInt(hour); 
        int minInt=Integer.parseInt(min); 
        hour=String.format("%d:%02d", ((hourInt==0||hourInt==12)?12:hourInt%12),minInt); 
        Log.d("correct Time", hour); 
        time.setText(hour); 
       } 
       Log.d("hour:", hour); 
       Log.d("min:",min); 
      } 
      deal.setText(offer.get(j)); 
      deal.setTypeface(typeface);*/ 

      //--remove this----------------------- 
      time.setText("0:0"+j); 
      //deal.setText("--"); 

      //----------------------------------- 
      l.addView(time); 
      l.addView(v1); 
      //l.addView(deal); 
      rl.addView(l);     
     } 

     //---------------------------------------------------------------------------------------- 


     return itemView; 

    } 
    @Override 
    public int getCount() { 
     return 8; /* where n is the number of row you want */ 
    } 

} 



} 

這裏是我的每個項目的xml代碼:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
    <ImageView 
     android:id="@+id/restaurantImage_restList_iv" 
     android:layout_width="76dp" 
     android:layout_height="76dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:adjustViewBounds="true" 
     android:maxHeight="80dp" 
     android:maxWidth="80dp" 
     android:src="@drawable/ic_launcher" /> 

    <TextView 
     android:id="@+id/restaurantName_restList_tv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/restaurantImage_restList_iv" 
     android:paddingLeft="2dp" 

     android:text="Restaurant Name" 
     android:textColor="@color/tgred" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/restaurantLocation_restList_tv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/restaurantName_restList_tv" 
     android:layout_below="@+id/restaurantName_restList_tv" 
     android:paddingLeft="2dp" 
     android:text="Location Name" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <TextView 
     android:id="@+id/restaurantRating_restList_tv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:textColor="@android:color/white" 
     android:paddingTop="4dp" 
     android:paddingBottom="4dp" 
     android:paddingRight="6dp" 
     android:paddingLeft="6dp" 
     android:layout_marginTop="2dp" 
     android:text="3.5" 

     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <TextView 
     android:id="@+id/restaurantCusine_restList_tv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="2dp" 


     android:text="Cusines" 
     android:layout_toRightOf="@+id/restaurantImage_restList_iv" 
     android:layout_below="@+id/restaurantLocation_restList_tv" 
     android:textColor="@color/tabgray" /> 

    <HorizontalScrollView 
     android:id="@+id/restaurantSlotOfferLayout_restList_hsv" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/restaurantImage_restList_iv" 
     android:paddingTop="2dp" 
     android:visibility="visible" > 

     <LinearLayout 
      android:id="@+id/restaurantSlotOffer_restList_tv" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:paddingBottom="10dp" > 
     </LinearLayout> 
    </HorizontalScrollView> 

    <Button 
     android:id="@+id/button1" 
      android:textColor="@android:color/white" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="80dp" 
     android:layout_height="20dp" 
     android:layout_marginTop="4dp" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/restaurantRating_restList_tv" 
     android:background="@color/tgred" 
     android:text="Book Now" 
     android:visibility="visible" /> 

</RelativeLayout> 
</RelativeLayout> 

下面是列表代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 

    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:padding="4dp" > 
    </ListView> 

    <Button 
     android:id="@+id/map_bt" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:background="@android:color/black" 
     android:text="Map" 
     android:textColor="@android:color/white" /> 

</RelativeLayout> 

現在我的問題是,當我運行此代碼,我在這是在循環中列表中每行代碼得到插槽和報價,但它是附加在我向上或向下滾動列表。但我只需要顯示七個插槽並提供。

在第一次運行代碼時,它只顯示了7個插槽,但是當我向上或向下滾動時,它會更新並顯示14個插槽並繼續。 請幫助我,我把我所有的努力,但無法解決這個問題。

回答

0

每次在getView方法中都會調用rl.removeAllViews(),每次都會停止添加插槽。

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //Make sure we have a view to work with (may have been given null) 
     Log.d("Position:", " "+position); 
     View itemView = convertView; 

     if(itemView == null){ 
      itemView = getLayoutInflater().inflate(R.layout.item_view, parent,false); 
     } 

     //find the Car to work with 
     Restaurant restaurantGetSetData=restaurantList.get(position); 

     ImageView restaurantImage_restList_iv=(ImageView)itemView.findViewById(R.id.restaurantImage_restList_iv); 
     restaurantImage_restList_iv.setImageResource(restaurantGetSetData.getIconID()); 

     TextView restaurantName_restList_tv=(TextView)itemView.findViewById(R.id.restaurantName_restList_tv); 
     restaurantName_restList_tv.setText(restaurantGetSetData.getRestaurantName()+"count:"+count++); 

     TextView restaurantCusine_restList_tv=(TextView)itemView.findViewById(R.id.restaurantCusine_restList_tv); 
     restaurantCusine_restList_tv.setText(restaurantGetSetData.getRestaurantCusine()); 

     TextView restaurantLocation_restList_tv=(TextView)itemView.findViewById(R.id.restaurantLocation_restList_tv); 
     restaurantLocation_restList_tv.setText(restaurantGetSetData.getRestaurantLocation()); 


     TextView restaurantRating_restList_tv=(TextView)itemView.findViewById(R.id.restaurantRating_restList_tv); 
     restaurantRating_restList_tv.setText(restaurantGetSetData.getRating()); 
     String rate=restaurantGetSetData.getRating(); 
     restaurantRating_restList_tv.setBackgroundColor(Color.parseColor("#"+ArrayColor[(int) Float.parseFloat(rate)])); 



     //-----------------------slot and offer-------------------------------------------------- 

     Typeface typeface = Typeface.createFromAsset(getBaseContext().getAssets(), 
       "helvetica_reg.ttf"); 
     LayoutParams params = new LayoutParams(
       LayoutParams.WRAP_CONTENT,  
       LayoutParams.WRAP_CONTENT 
     ); 
     LayoutParams layout=new LayoutParams(LayoutParams.WRAP_CONTENT,  
       LayoutParams.WRAP_CONTENT); 
      layout.setMargins(5, 0, 5, 0); 
      params.setMargins(0, 10, 0, 10); 
     LinearLayout rl=(LinearLayout)itemView.findViewById(R.id.restaurantSlotOffer_restList_tv); 


rl.removeAllViews();//<------------------------------------------ 

     for(int j=0;j<8;j++) 
     { 
      LinearLayout l=new LinearLayout(getApplicationContext()); 
      l.clearDisappearingChildren(); 
      l.setLayoutParams(layout); 
      l.setOrientation(LinearLayout.VERTICAL); 
      TextView time=new TextView(getApplicationContext()); 
      time.setBackgroundColor(getResources().getColor(R.color.out_gray)); 
      time.setTextColor(Color.BLACK); 
      time.setTextSize(getApplicationContext().getResources().getDimensionPixelSize(R.dimen.custom_text_size)); 
      time.setGravity(Gravity.CENTER); 
      time.setLayoutParams(new LayoutParams(90, LayoutParams.WRAP_CONTENT)); 
      time.setPadding(2,2,2,2); 
      View v1=new View(getApplicationContext()); 
      v1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 1)); 
      v1.setBackgroundColor(color.white); 
      TextView deal=new TextView(getContext()); 
      deal.setLayoutParams(new LayoutParams(90, LayoutParams.WRAP_CONTENT)); 
      deal.setGravity(Gravity.CENTER); 
      deal.setTextSize(getApplicationContext().getResources().getDimensionPixelSize(R.dimen.custom_text_size)); 
      deal.setPadding(2,2,2,2); 
      deal.setTextColor(getResources().getColor(R.color.our_red)); 
      deal.setBackgroundColor(getResources().getColor(R.color.out_gray)); 
      time.setTypeface(typeface); 

      //Log.d("slot from info anshul:", slot.get(j)+"\n"); 
      //time code 
      /*{ 
       String hour=slot.get(j).substring(0, 2); 
       String min=slot.get(j).substring(3,5); 
       if(hour.equals("--")){ 
        Log.d("hour is ", "-------"); 
        time.setText("--:--"); 
       }else{ 
        int hourInt=Integer.parseInt(hour); 
        int minInt=Integer.parseInt(min); 
        hour=String.format("%d:%02d", ((hourInt==0||hourInt==12)?12:hourInt%12),minInt); 
        Log.d("correct Time", hour); 
        time.setText(hour); 
       } 
       Log.d("hour:", hour); 
       Log.d("min:",min); 
      } 
      deal.setText(offer.get(j)); 
      deal.setTypeface(typeface);*/ 

      //--remove this----------------------- 
      time.setText("0:0"+j); 
      //deal.setText("--"); 

      //----------------------------------- 
      l.addView(time); 
      l.addView(v1); 
      //l.addView(deal); 
      rl.addView(l);     
     } 

     //---------------------------------------------------------------------------------------- 


     return itemView; 

    } 
+0

也嘗試在getView方法中做很多事情,例如在構造函數中創建字體並使用它來代替在getView中創建它 –

+0

非常感謝。我試圖解決這個問題從昨天晚上開始。 –

0

哦,我明白了。

rl.addView(l); // this is problem. 

您需要'阻止'添加視圖。當你上下滾動

下來,

getView() 

一次又一次地叫。

所以

rl.addView(); // 7 

rl.addView(); 7 + 7
rl.addView(); 7 + 7 + 7 ...

防止每次添加或刪除。 選擇你想要的。

+0

請詳細說明我無法理解。 –

+0

@vipul mittal他的解決方案應該工作 –