【问题标题】:How to make an ImageView visible and invisible on clicking a ListView row in android?如何在 Android 中单击 ListView 行时使 ImageView 可见和不可见?
【发布时间】:2014-05-01 07:46:26
【问题描述】:

我有一个ListView,它是使用SimpleAdapter 生成的。我在与SimpleAdapter 一起使用的xml 文件中有一个textview 和一个ImageView。图像视图首先设置为不可见。单击 Listview 中的一行时,Imageview 变为可见。我想做的是:

如果我在 Listview 中有 4 行并且如果我单击第 1 行,那么 ImageView 应该在第 1 行可见,然后如果我单击第 2 行,则 imageview 应该从第 1 行变得不可见,并且应该只在第 2 行可见。

我已经完成了以下操作,但它的工作方式如下:

如果我单击第 1 行,则 ImageView 在第 1 行可见。然后,如果我单击第 2 行,则 ImageView 在第 2 行上可见,并且在第 1 行上也可见。我想让它从第 1 行不可见,并且只显示在点击的行上。

谁能一步一步指导我如何做到这一点。我的代码和xml如下:

myactivity.class

   final ListAdapter k=new SimpleAdapter(getActivity(),val,R.layout.senttaskdata2,new String[]{"rname"},new int[]{R.id.textView1})
  {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final View v = super.getView(position, convertView, parent);
                    ImageView im=(ImageView)v.findViewById(R.id.ImageView3);
                    @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                        ImageView im=(ImageView)arg1.findViewById(R.id.ImageView3);
                       setVisibility(arg1.VISIBLE);
                    });
        return v;
    }

  };
  sent.setAdapter(k);

senttaskdata2.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="vertical" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="70dp"

    android:background="@android:color/transparent" >

   <ImageView
        android:id="@+id/imageView3"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="8dp"
        android:src="@drawable/test2" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:text="TextView"
        android:textColor="@android:color/darker_gray"
        android:textSize="11sp" />

      </RelativeLayout>

  </LinearLayout>

【问题讨论】:

    标签: android listview android-listview simpleadapter


    【解决方案1】:

    我有同样的问题,我找到了一个简单的方法。

    首先,在您的自定义适配器中

    public class MyAdapter extends BaseAdapter {
    
        private int selectedIndex;
        private boolean visible;
    
    // omitted code
    
    }
    
    // omitted code
    
    public View getView(int index, View view, ViewGroup parent) {
    
            TextView textView= (TextView) view.findViewById(R.id.text_view);
            ImageView imgView = (ImageView) view.findViewById(R.id.image_view);
    
            textView.setText("some text");
    
            if(index == selectedIndex) {
                imgView .setVisibility(View.VISIBLE);
            } else {
                imgView .setVisibility(View.INVISIBLE);
            }
    
            return view;
        }
    

    第二,在你的活动中

     public void onCreate(Bundle bundle) {
    
        // omitted code
            listView.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapter, View view,
                        int position, long id) {
    
                    // change index of selected item
                    fontAdapter.setSelectedIndex(position);
                    fontAdapter.notifyDataSetChanged();
                }
    
            });
       // omitted code
       }
    

    【讨论】:

    • 谢谢,你在这里有很好的解决方案:D。干杯
    【解决方案2】:

    试试这个我已经实现了我自己的适配器,而不是使用简单适配器

    ListAdapter.java

    package com.stackoverflow.listviewanswer;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class ListAdapter extends BaseAdapter
    {
    
        private boolean[] mVisibilityList = null;
        private String[] mNameList = null;
        private Context mContext = null;
        private LayoutInflater mInflater = null;
    
        public ListAdapter(Context iContext, boolean[] iVisibilityList, String[] iNameList)
        {
            mVisibilityList = iVisibilityList;
            mContext = iContext;
            mInflater = LayoutInflater.from(mContext);
            mNameList = iNameList;
        }
    
        public void setVisibilityList(boolean[] iVisibilityList)
        {
            mVisibilityList = iVisibilityList;
        }
    
        @Override
        public int getCount()
        {
    
            return mVisibilityList.length;
        }
    
        @Override
        public Object getItem(int iPosition)
        {
    
            return mVisibilityList[iPosition];
        }
    
        @Override
        public long getItemId(int iPosition)
        {
    
            return iPosition;
        }
    
        @Override
        public View getView(int iPosition, View iConvertView, ViewGroup iViewGroup)
        {
            Holder holder = new Holder();
    
            if (iConvertView == null)
            {
                iConvertView = mInflater.inflate(R.layout.list, null);
                holder.mImageView = (ImageView) iConvertView.findViewById(R.id.imageView3);
                holder.mTextView = (TextView) iConvertView.findViewById(R.id.textView1);
                iConvertView.setTag(holder);
    
            }
            else
            {
                holder = (Holder) iConvertView.getTag();
            }
    
            // SET DATA
            if (mVisibilityList[iPosition])
            {
                holder.mImageView.setVisibility(View.VISIBLE);
            }
            else
            {
                holder.mImageView.setVisibility(View.INVISIBLE);
    
                // OR
                // holder.mImageView.setVisibility(View.GONE);
                // Use as per your needs
            }
    
            holder.mTextView.setText(mNameList[iPosition]);
    
            return iConvertView;
        }
    
        private class Holder
        {
            TextView mTextView = null;
            ImageView mImageView = null;
        }
    
    }
    

    MainActivity.java

    package com.stackoverflow.listviewanswer;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.widget.AdapterView.OnItemClickListener;
    
    public class MainActivity extends Activity implements OnItemClickListener
    {
        ListView mListView = null;
        boolean[] mVisisbilityList = { false, false, false, false };
        String[] mNameList = { "TextView 1", "TextView 2", "TextView 3", "TextView 4" };
        ListAdapter adapter = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mListView = (ListView) findViewById(R.id.list_view);
            mListView.setOnItemClickListener(this);
    
            adapter = new ListAdapter(this, mVisisbilityList, mNameList);
    
            mListView.setAdapter(adapter);
        }
    
        @Override
        public void onItemClick(AdapterView<?> iAdapterView, View iView, int iPosition, long iId)
        {
            for (int i = 0; i < 4; i++)
            {
                mVisisbilityList[i] = false;
            }
            mVisisbilityList[iPosition] = true;
    
            adapter.setVisibilityList(mVisisbilityList);
    
            adapter.notifyDataSetChanged();
    
        }
    
    }
    

    list.xml 与您的 senttaskdata2.xml 相同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2011-10-10
      相关资源
      最近更新 更多