8

カスタムカーソルアダプターを使用してListViewを埋めるListViewがあります。

Therow.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の可視性は失われています。特定の1行に表示されるようにします。これが私が試したコードですが、機能していません...

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;
} 

編集:

私はそれを動かしました。これを使用して、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);
4

10 に答える 10

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);
于 2012-04-24T02:11:31.443 に答える
1

getView()おそらく、アダプター でそれを行う必要があります

編集:

@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...
}
于 2012-04-23T03:33:34.420 に答える
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;
} 

それは私のために働きます...それはあなたを助けるかもしれません。

于 2012-04-23T04:24:09.653 に答える
0

このようにしなければなりません

iv.setVisibility(View.VISIBLE);
于 2012-04-23T03:33:42.660 に答える
0

私は同じ問題を抱えています...私は非標準的な解決策で解決しましたが、うまくいきました...

v.setImageResource(R.color.transparent);

アンドロイドからRをインポートする

import android.R;
于 2013-08-30T15:14:15.643 に答える
0

iv.setVisibility(View.VISIBLE);とはどちらiv.setVisibility(ImageView.VISIBLE);も正しいですが、 &はクラスで定義されているため、View代わりに使用することをお勧めします。ImageViewVISIBLEGONEView

その中の両方の可視性 (VISIBLEまたはGONE) を変更しifます。お気に入り:

if(?)
    iv.setVisibility(View.VISIBLE);
else iv.setVisibility(View.GONE);
于 2014-01-26T06:11:14.883 に答える
0

setVisibility(int) を使用してビューを非表示または表示できます。使用するiv.setVisibility(View.VISIBLE);

于 2014-08-25T10:02:00.197 に答える
0

いくつかのウィジェットがいくつかの行に表示され、他の行には表示されないという同様の問題に遭遇しました。問題はビューのリサイクルによるものでした。それがここでの問題かどうかは正確にはわかりませんが、とにかく処理する必要があります。秘訣は、すべての行の可視性を設定することです。表示/非表示にする行だけではなく。

そう:

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

それ以外の場合は、0 以外の位置では可視性がなくなったと想定していますが、ビューのリサイクルには当てはまらない可能性があります。ちなみに、私はこの作業を bindView で行っています。それが技術的に正しいかどうかはわかりません。

于 2012-04-23T04:35:53.707 に答える
0

それがしばらく働いているなら、私はあなたを助けることができるかもしれません. リストビューを移動するたびに、すべてのビューが再作成されます。この場合、ビューの最後の状態は保存されません。したがって、必要なことは、各イメージビューの状態を保存し、それに応じて設定する必要がある getView() です。役立つかもしれない回答の 1 つを投稿しています。ここに小さなコードがあります: ブール配列リストを作成します。

プライベート ArrayList imageview_visible = null;

次に、コンストラクターですべてのイメージビューの状態を false に設定します。

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

getView に次のコードを記述します。

public View getView (int position, View convertView, ViewGroup parent) { //コードを書く

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

}

ビューを非表示または非表示にするたびに、それを imageview_visible.set(true または false) に保存するだけで、すべてのイメージ ビューの状態が保存され、それに応じてすべてのイメージ ビューが設定されます。

于 2012-04-23T04:40:39.290 に答える
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);
于 2012-04-23T04:41:00.717 に答える