2012-04-23 2 views
8

У меня есть ListView с помощью настраиваемого курсора для заполнения ListView.Невозможно изменить видимость ImageView

row.xml

<?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="horizontal" > 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="0dip" 
     android:layout_weight="1" 
     android:layout_height="fill_parent"> 
     <TextView 
      android:id="@+id/title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:gravity="center_vertical" 
      android:ellipsize="marquee" 
      android:textSize="24dp" /> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/artist" 
      android:singleLine="true" 
      android:ellipsize="marquee" 
      android:textSize="14dp" /> 
    </LinearLayout> 
    <ImageView 
     android:id="@+id/currentplaying" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_marginLeft="1dip" 
     android:src="@android:drawable/ic_media_play" 
     android:contentDescription="@string/now_playing" 
     android:visibility="gone" /> 
</LinearLayout> 

Как вы можете видеть, видимость ImageView является ушел. Я хочу сделать это видимым для одной конкретной строки. Вот код, который я попробовал, но это не рабочий ...

View view = getListView().getAdapter().getView(0, null, null); 
ImageView iv = (ImageView)view.findViewById(R.id.currentplaying); 
iv.setVisibility(ImageView.VISIBLE); 

Спасибо заранее.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if(convertView==null) { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.yourlayout, null); 
     holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); 
     convertView.setTag(holder); 
    } 
    else { 
     holder=(ViewHolder)convertView.getTag(); 
    } 
    if(position==0) {  
     holder.imgViewLogo.setVisiblity(View.VISIBLE); 
    } 
    return convertView; 
} 

EDIT:

Я получил это работает. Я использовал это для запуска операции ListView.

intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID))); 
startActivity(intent); 

В ListView деятельности

currentplayingid = getIntent().getExtras().getInt("id");  

Затем я добавил это в bindview()

ImageView imgview = (ImageView)view.findViewById(R.id.currentplaying); 
int id = c.getInt(c.getColumnIndex(DatabaseHelper._ID)); 
if (id == SongsListActivity.this.currentplayingid) 
    imgview.setVisibility(View.VISIBLE); 
else 
    imgview.setVisibility(View.GONE); 
+0

iv.setVisibility (View.VISIBLE); или iv.setVisibility (1); не работает? –

+0

Попробуйте использовать View.INVISIBLE вместо View.GONE, если он вам подходит. И попробуйте сделать это в коде, а не в файле xml. –

ответ

1

, возможно, вы должны сделать это в getView() вашего адаптера

EDIT:

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

    if (position == 0) 
    { 
     holder.imgViewLogo.setVisibility(ImageView.VISIBLE); 
    } 
    else 
    { 
     holder.imgViewLogo.setVisibility(ImageView.GONE); 
    } 

    // codes... 
} 
+0

Проблема, которую я получаю при ее использовании в getView(), - это каждый раз, когда я прокручиваю, каждый вид изображения 0-й строки становится видимым на экране. – Dipesh

+0

Что вы подразумеваете под «каждой 0-й строкой»? – candyleung

+0

Можете ли вы привести пример для работы? – Dipesh

0

Вы должны сделать это как этот

iv.setVisibility(View.VISIBLE); 
+0

Использование View.VISIBLE вместо ImageView.VISIBLE не работает. – Dipesh

+0

Что для кнопки изображения? – LomE999

0

Попробуйте следующий код следующим образом,

 private class ViewHolder 
{ 
    ImageView imgViewLogo; 

} 

    @Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    ViewHolder holder; 
    if(convertView==null) 
    { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.yourlayout, null); 

     holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); 
     convertView.setTag(holder); 
    } 
    else 
    { 
     holder=(ViewHolder)convertView.getTag(); 
    } 

     if(position==0) 
    {  
    holder.imgViewLogo.setVisiblity(View.VISIBLE); 
     } 


    return convertView; 
} 

Это работает для меня ... Это может помочь вам.

+0

Я не хочу, чтобы это произошло, когда щелкнул список. Я хочу, чтобы изображение было видимым для одной строки, когда отображается список. – Dipesh

+0

Извините, я неправильно понял ваше требование. проверьте обновленный ответ. – deepa

+0

У меня есть два текста в моей строке. Проверьте мой row.xml выше. Они больше не отображают текст. И когда я прокручиваю список вниз, изображение просматривается для некоторых других строк, которые, как я предполагаю, связано с тем, что в предыдущем ответе упоминался Joel Skrepnek. – Dipesh

0

Я столкнулся с аналогичными проблемами, когда несколько виджетов появлялись для некоторых строк, но не для других. Проблемы были вызваны переработкой. Я не совсем уверен, что это ваша проблема здесь, но вы все равно должны ее обработать. Фокус в том, чтобы установить видимость для каждой строки; а не только для строки, которую вы хотите отобразить/исчезнуть.

Итак:

if (position == 0) 
{ 
    iv.setVisibility(ImageView.VISIBLE); 
} 
else 
{ 
    iv.setVisibility(ImageView.GONE); 
} 

В противном случае, Вы предполагаете, что для других, чем 0 видимость Gone позиции, но это не может быть в случае с видом на переработку. Кстати, я делаю эту работу в bindView. Не уверен, что это технически правильно.

+0

Как узнать позицию в bindView()? – Dipesh

0

Если он работает некоторое время, то я могу вам помочь. Случилось так, что всякий раз, когда вы перемещаете список, он снова воссоздает все взгляды, в этом случае он никогда не сохраняет последнее состояние зрения. Итак, что вам нужно сделать, это сохранить состояние каждого вашего изображения и в getView(), которое вы должны установить соответственно. Я отправляю один из своих ответов, который может вам помочь. Вот немного кода для вашей помощи: я создам логический arraylist.

частный ArrayList imageview_visible = null;

Тогда обращу состояние всех ImageView, как ложное в моем конструкторе:

for (int i=0; i < no_of_elements.size(); i++) { 
    imageview_visible.add(i, false); 
} 

В вашем GetView написать этот код:

общественное мнение GetView (интермедиат положение, Вид convertView, ViewGroup родитель) { // ПИШИТЕ СВОЙ КОД

if (imageview_visible.get(position) == true) 
{ 
    //SET YOUR IMAGE VIEW AS VISIBLE 
} else { 
    // SET IMAGEVIEW AS GONE 
} 

}

Всякий раз, когда вы скрыть или отобразить свой вид просто сохранить его в imageview_visible.set (истина или ложь), это сохранит штат вас все ImageView и установить каждый вид изображение в соответствии с

0

Используйте LayoutInflater, чтобы получить вид объекта

LayoutInflater inflater = this.getLayoutInflater(); 
View rowView = inflater.inflate(R.layout.row, null, true); 
ImageView iv = (ImageView)view.findViewById(R.id.currentplaying); 
iv.setVisibility(ImageView.VISIBLE); 
+0

объект просмотра не определен. – zygimantus

2

У меня это работает. Я использовал это, чтобы начать просмотр списка.

intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID))); 
startActivity(intent); 

В списке следует деятельность,

currentplayingid = getIntent().getExtras().getInt("id");  

Затем я добавил это в BindView()

ImageView imgview = (ImageView)view.findViewById(R.id.currentplaying); 
int id = c.getInt(c.getColumnIndex(DatabaseHelper._ID)); 
if (id == SongsListActivity.this.currentplayingid) 
imgview.setVisibility(View.VISIBLE); 
else 
imgview.setVisibility(View.GONE); 
+0

Вы можете отметить этот вопрос как ответ ... :-) – Greenonline

0

Я тот же вопрос ... я решил с не решением STANDAR, но работал для меня ...

v.setImageResource(R.color.transparent); 

im портирование R от андроида

import android.R; 
0

Оба iv.setVisibility(View.VISIBLE); и iv.setVisibility(ImageView.VISIBLE); являются correcte, но это лучше использовать View вместо ImageView потому VISIBLE & GONE определены в View классе.

Вы больше всего меняетесь Обе видимости (VISIBLE или GONE) в этом if. например:

if(?) 
    iv.setVisibility(View.VISIBLE); 
else iv.setVisibility(View.GONE); 
0

Вы можете скрыть или показать виды с помощью setVisibility (int). iv.setVisibility(View.VISIBLE);

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