2016-04-15 6 views
0

Существует пользовательский listView, где он отображает текст или изображение или и то, и другое. Теперь он отображает текст или изображение или и то, и другое, но проблема заключается в том, что пока отображается только текст, занимаемое пространство для изображенияView все еще видно. Я также установил видимость в GONE, но это не скроет.imageview не скрывается на пользовательском Listview

код адаптера для Listview:

public class DescAdapter extends BaseAdapter implements Filterable{ 

private final listdisplay ds; 
private ArrayList<descusers> dusers; 
private ArrayList<descusers> orig; 

public DescAdapter(listdisplay ds, ArrayList<descusers> dusers) { 
    this.ds = ds; 
    this.dusers = dusers; 
} 

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

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

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

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

    descusers du = dusers.get(position); 
    String username = du.loginname; 
    String descCrip=du.descCrip; 
    String Limage = du.image; 

    convertView = LayoutInflater.from(ds).inflate(R.layout.customlist,null); 
    TextView uname = (TextView)convertView.findViewById(R.id.username); 
    TextView desc = (TextView)convertView.findViewById(R.id.description); 

    ImageView iview= (ImageView)convertView.findViewById(R.id.imageList); 
    iview.setVisibility(View.GONE); 

    uname.setText(username); 
    desc.setText(descCrip); 

    if(!Limage.isEmpty()){ 
     Glide.with(convertView.getContext()).load(Limage) 
       .diskCacheStrategy(DiskCacheStrategy.ALL).fitCenter().centerCrop().into(iview); 
     iview.setVisibility(View.VISIBLE); 

    } 


    return convertView; 
} 

} 

Пользовательские XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="226dp" 
    android:orientation="vertical" 
    android:background="@drawable/test" 
    android:layout_gravity="center_horizontal|top"> 

<TextView 
    android:id="@+id/username" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="username" 
    android:textColor="#ff6aa9ff" 
    android:textSize="20sp" 
    android:textStyle="bold" 
    android:layout_marginLeft="45dp"/> 

<TextView 
    android:id="@+id/description" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Suggest" 
    android:textColor="#ff06010b" 
    android:textSize="18sp" 
    android:layout_marginLeft="45dp"/> 

<ImageView 
    android:layout_width="275dp" 
    android:layout_height="165dp" 
    android:id="@+id/imageList" 
    android:layout_marginTop="6dp" 
    android:layout_marginLeft="45dp"/> 

</LinearLayout> 

Что плохого я сделал в приведенном выше коде?

Проблема с высотой Linear Layout, которая была установлена ​​как android: layout_height = "226dp", Changed to Wrap-Content решила проблему.

+2

добавить 'если (convertView == NULL) {TextView uname = (TextView) convertView.findViewById (R.id.username); TextView desc = (TextView) convertView.findViewById (R.id.description); ImageView iview = (ImageView) convertView.findViewById (R.id.imageList); iview.setVisibility (View.GONE); uname.setText (имя пользователя); desc.setText (descCrip); если (Limage.isEmpty()) { Glide.with (convertView.getContext()) нагрузки (Limage) .diskCacheStrategy (DiskCacheStrategy.ALL) .fitCenter() centerCrop() в (IView)...; iview.setVisibility (View.VISIBLE); }} ' –

+0

Вы вызываете notifyDataSetChanged() после обновления вашего представления? –

+2

@IntelliJAmiya - Не работает, такая же проблема. – user2269164

ответ

0

попробуйте этот код в методе GetView от адаптера:

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

    descusers du = dusers.get(position); 
    String username = du.loginname; 
    String descCrip=du.descCrip; 
    String Limage = du.image; 
    ViewHolder viewHolder = null; 
    if(convertView==null){ 
    viewHolder = new ViewHolder(); 
    convertView = LayoutInflater.from(ds).inflate(R.layout.customlist,null); 
    viewHolder.uname = (TextView)convertView.findViewById(R.id.username); 
    viewHolder.desc = (TextView)convertView.findViewById(R.id.description); 

    viewHolder.iview= (ImageView)convertView.findViewById(R.id.imageList); 
    convertView.setTag(viewHolder); 
}else{ 
    viewHolder = (ViewHolder) convertView.getTag(); 
} 

    viewHolder.uname.setText(username); 
    viewHolder.desc.setText(descCrip); 

    if(!Limage.isEmpty()){ 
     Glide.with(convertView.getContext()).load(Limage) 
       .diskCacheStrategy(DiskCacheStrategy.ALL).fitCenter().centerCrop().into(viewHolder.iview); 
     viewHolder.iview.setVisibility(View.VISIBLE); 

    }else{ 
     viewHolder.iview.setVisibility(View.GONE); 
    } 


    return convertView; 
} 

И использовать этот класс в качестве держателя:

class ViewHolder { 
    TextView uname; 
    TextView desc; 
    ImageView iview; 


} 
+0

Проверьте этот ответ. –

+1

Уже предложенный @IntelliJ Amiya в вышеуказанных комментариях проверяет. –

+0

@jaydroider просмотрели код и попробовали его. независимо от того, работает он или нет? –

Смежные вопросы