2016-03-10 57 views
-3

我需要帮助来解决以下问题:如何解决Android Java ListView适配器

当我向下滚动我的ListView适配器包含国家的列表更改为只有一个国家。

这是我的适配器:

public class Nraeby_ListViewAdapter extends BaseAdapter { 
    private String Liked; 
    Context mContext; 
    // Declare Variables 
    LayoutInflater inflater; 
    private ArrayList<HashMap<String, String>> data; 
    ImageLoader imageLoader; 
    HashMap<String, String> resultp = new HashMap<String, String>(); 

    public Nraeby_ListViewAdapter(Context context, 
            ArrayList<HashMap<String, String>> arraylist) { 
     this.data = arraylist; 
     mContext = context; 

     imageLoader = new ImageLoader(mContext); 
     inflater = LayoutInflater.from(mContext); 

    } 


    @Override 
    public int getCount() { 
     return data.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return data.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 


    public class ViewHolder { 
     // Declare Variables 
     TextView rank; 
     TextView country; 
     TextView population; 
     test.Droidlogin.CircleImage flag; 
     test.Droidlogin.material.AnimateCheckBox checkBox; 
     ImageButton btnFavourite; 


    } 
    public View getView(final int position, View view, ViewGroup parent) { 

     final ViewHolder holder; 
     if (view == null) { 
      holder = new ViewHolder(); 
      view = inflater.inflate(R.layout.nearby_listview_item, null); 

      // Get the position 
      resultp = data.get(position); 
      // Locate the TextViews in nearby_listview_item.xmltem.xml 

      holder.rank = (TextView) view.findViewById(R.id.rank); 
      holder.country = (TextView) view.findViewById(R.id.country); 
      // Locate the ImageView in nearby_listview_item.xmltem.xml 
      holder.flag = (test.Droidlogin.CircleImage) view.findViewById(R.id.flag); 
      holder.checkBox = (test.Droidlogin.material.AnimateCheckBox) view.findViewById(R.id.checkbox); 
      holder.btnFavourite = (ImageButton) view.findViewById(R.id.like); 
      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 
     // Capture position and set results to the TextViews 
     holder.rank.setText(resultp.get(NearbyUsers.RANK)); 
     holder.country.setText(resultp.get(NearbyUsers.COUNTRY)); 
     // Capture position and set results to the ImageView 
     // Passes flag images URL into ImageLoader.class 
     imageLoader.DisplayImage(resultp.get(NearbyUsers.FLAG), holder.flag); 

     TinyDB tinydb = new TinyDB(mContext); 
     Liked = tinydb.getString("MyUsers"); 




     //This handle and change icon when click on. 
     holder.btnFavourite.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       TinyDB tinydb = new TinyDB(mContext); 

       holder.btnFavourite.setImageResource(R.drawable.icon_liked); 
       tinydb.putString("MyUsers",resultp.get(NearbyUsers.COUNTRY)); 


       holder.btnFavourite.setImageResource(R.drawable.icon_liked); 

      } 
     }); 


     // Capture ListView item click 
     view.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       // Get the position 
       Intent intent = new Intent(mContext, SingleItemViewNearbyProfile.class); 
       // Pass all data rank 
       intent.putExtra("rank", resultp.get(NearbyUsers.RANK)); 
       // Pass all data country 
       intent.putExtra("country", resultp.get(NearbyUsers.COUNTRY)); 
       // Pass all data population 
       intent.putExtra("population",resultp.get(NearbyUsers.POPULATION)); 
       // Pass all data flag 
       intent.putExtra("flag", resultp.get(NearbyUsers.FLAG)); 
       // Start SingleItemView Class 
       mContext.startActivity(intent); 

      } 
     }); 
     return view; 


    } 



} 

请我需要如何修正这个错误

,这样,当向下滚动,它会显示所有国家的列表和一个按钮帮助

回答

1

您应该将getView中的行移到if块之外。像这样

final ViewHolder holder; 
resultp = data.get(position); 
if (view == null) { 
/// 
} 

您只是在创建新视图时更新resultp。对于回收视图,您使用的是陈旧的数据,这就是滚动后您看到一些不正确的国家/地区数据的原因。

+0

它工作的感谢,但是当我点击复选框,如果上下滚动它不勾选 – kengodmans