2016-01-11 148 views
0

嗨我試圖在列表視圖中顯示文本,圖像。要將內容加載到我的列表視圖中,我有三種情況。Android:ListView滾動後無法正常工作

1.有時我只能從json獲得文本。所以,在這種情況下,我必須隱藏ImageView

2.某些情況下,我只能從json獲取圖像url。所以,在這種情況下,我不得不隱藏的TextView

在其他情況下,我正從JSON兩個圖像的URL和文字,所以,在這種情況下,我沒有隱瞞什麼

通過遵循這些場景,我在第一時間正確加載所有內容,但是當我從上到下滾動和從下往上滾動時。所有圖像視圖都充滿了圖像(但對於特定的位置沒有圖像URL)

我的適配器代碼是

package com.app.listviewitemid.adapter; 

import java.util.ArrayList; 

import com.app.listviewitemid.R; 
import com.app.listviewitemid.model.Items; 
import com.bumptech.glide.Glide; 

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ItemsAdapter extends ArrayAdapter<Items>{ 

    ArrayList<Items> itemsArrayList; 
    int Resource; 
    LayoutInflater inflater; 
    Context context; 
    ViewHolder holder; 

    Button btnCheck; 
    Items globPosition; 

    public ItemsAdapter(Context context, int resource, ArrayList<Items> objects){ 
     super(context, resource, objects); 
     this.context = context; 
     this.Resource = resource; 
     this.itemsArrayList = objects; 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View v = convertView; 
     if(v == null){ 
      v = inflater.inflate(Resource, null); 
      holder = new ViewHolder(); 

      holder.tvPostID = (TextView) v.findViewById(R.id.tv_post_id); 
      holder.tvPostText = (TextView) v.findViewById(R.id.tv_post_text); 
      holder.ivPostImage = (ImageView) v.findViewById(R.id.iv_post_img); 

      btnCheck = (Button) v.findViewById(R.id.btn_check); 

      v.setTag(holder); 

     }else{ 

      holder = (ViewHolder) v.getTag(); 
     } 

     globPosition = itemsArrayList.get(position); 

     holder.tvPostID.setText(itemsArrayList.get(position).getPostID()); 


     if(globPosition.getPostText().equals(null) || globPosition.getPostText().equals("")){ 

     }else { 
      holder.tvPostText.setText(globPosition.getPostText()); 
     } 



     if(globPosition.getPostImage().equals(null) || globPosition.getPostImage().equals("")){ 

     }else { 
      Glide.with(context).load(globPosition.getPostImage()).placeholder(R.drawable.loading_img).error(R.drawable.bg_480_800).into(holder.ivPostImage); 
     } 




     btnCheck.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       Log.e("PostID", globPosition.getPostID()); 

      } 
     }); 

     return v; 
    } 

    static class ViewHolder{ 

     TextView tvPostID; 
     TextView tvPostText; 
     ImageView ivPostImage; 

    } 

} 

適配器佈局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tv_post_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/post_id" 
     android:textColor="#000000" 
     android:textSize="12sp" /> 

    <TextView 
     android:id="@+id/tv_post_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#000000" 
     android:textSize="12sp" /> 

    <ImageView 
     android:id="@+id/iv_post_img" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:contentDescription="@string/empty" /> 

    <Button 
     android:id="@+id/btn_check" 
     android:layout_width="match_parent" 
     android:layout_height="35dp" 
     android:background="#000000" 
     android:text="@string/check" 
     android:textColor="#FFFFFF" /> 

</LinearLayout> 

如何獲得擺脫這個?

+0

u可以使用globPosition itemsArrayList。獲取(位置)或本地聲明globPosition –

回答

0

我從ankit aggarwal的答案中得到了想法(他的代碼不能正常工作,但他給了我基本的想法)。還有一兩件事,以前我沒有得到正確的位置,所以我改變了適配器代碼有點

代碼

package com.app.listviewitemid.adapter; 

import java.util.List; 

import com.app.listviewitemid.R; 
import com.app.listviewitemid.model.Items; 
import com.bumptech.glide.Glide; 

import android.annotation.SuppressLint; 
import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ItemsAdapter extends BaseAdapter{ 

    List<Items> itemsArrayList; 
    int Resource; 
    LayoutInflater inflater; 
    Context context; 

    Button btnCheck; 

    public ItemsAdapter(Context context, List<Items> items) { 
     this.context = context; 
     this.itemsArrayList = items; 
    } 

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

    @Override 
    public Object getItem(int location) { 
     return itemsArrayList.get(location); 
    } 

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

    @SuppressLint("InflateParams") @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (inflater == null) 
      inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) 
      convertView = inflater.inflate(R.layout.adapter_layout, null); 

      TextView tvPostID = (TextView) convertView.findViewById(R.id.tv_post_id); 
      TextView tvPostText = (TextView) convertView.findViewById(R.id.tv_post_text); 
      ImageView ivPostImage = (ImageView) convertView.findViewById(R.id.iv_post_img); 

      btnCheck = (Button) convertView.findViewById(R.id.btn_check); 

      final Items items = itemsArrayList.get(position); 


      tvPostID.setText(items.getPostID()); 


      if(items.getPostText().equals(null) || items.getPostText().equals("")){ 
       tvPostText.setVisibility(View.GONE); 
      }else { 
       //ivPostImage.setVisibility(View.GONE); 

       if(items.getPostImage().equals(null) || items.getPostImage().equals("")){ 
        ivPostImage.setVisibility(View.GONE); 
       }else { 
        ivPostImage.setVisibility(View.VISIBLE); 
        tvPostText.setVisibility(View.GONE); 
        Glide.with(context).load(items.getPostImage()).placeholder(R.drawable.loading_img).error(R.drawable.bg_480_800).into(ivPostImage); 
       } 

       tvPostText.setVisibility(View.VISIBLE); 
       tvPostText.setText(items.getPostText()); 
      } 



      if(items.getPostImage().equals(null) || items.getPostImage().equals("")){ 
       ivPostImage.setVisibility(View.GONE); 
      }else { 
       ivPostImage.setVisibility(View.VISIBLE); 
       //tvPostText.setVisibility(View.GONE); 

       if(items.getPostText().equals(null) || items.getPostText().equals("")){ 
        tvPostText.setVisibility(View.GONE); 
       }else { 
        tvPostText.setVisibility(View.VISIBLE); 
         tvPostText.setText(items.getPostText()); 
       } 
       Glide.with(context).load(items.getPostImage()).placeholder(R.drawable.loading_img).error(R.drawable.bg_480_800).into(ivPostImage); 
      } 


      btnCheck.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 

        Log.e("PostID", items.getPostID()); 

       } 
      }); 

     return convertView; 
    } 

} 

由於ANKIT AGGARWAL

1
if(globPosition.getPostText().equals(null) || globPosition.getPostText().equals("")){ 
      holder.tvPostText.setVisibility(View.GONE); 
     }else { 
      holder.ivPostImage.setVisibility(View.GONE); 
      holder.tvPostText.setVisibility(View.VISIBLE); 
      holder.tvPostText.setText(globPosition.getPostText()); 
     } 



     if(globPosition.getPostImage().equals(null) || globPosition.getPostImage().equals("")){ 
      holder.ivPostImage.setVisibility(View.GONE); 
     }else { 
      holder.ivPostImage.setVisibility(View.GONE); 
      holder.tvPostText.setVisibility(View.VISIBLE); 
      Glide.with(context).load(globPosition.getPostImage()).placeholder(R.drawable.loading_img).error(R.drawable.bg_480_800).into(holder.ivPostImage); 
     }