将viewGroup添加到ListView?

时间:2010-07-07 14:13:44

标签: android listview

为我的公司做一些R& D。我们正在尝试使用包含imageview的listView,以及listview中每个条目的两个编辑框。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:isScrollContainer="true"
  android:focusableInTouchMode="false"
  android:focusable="false">
  <ImageView android:id="@+id/imgView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:maxWidth="100dp"
  android:maxHeight="100dp"/>
  <LinearLayout 
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical">
    <EditText android:id="@+id/img_title"
    android:hint="Title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="150dp"/>
    <EditText android:id="@+id/img_desc"
    android:hint="Description"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="150dp"/>
  </LinearLayout>
</LinearLayout>

这是我试图用于列表视图中的项目的布局文件。在我们的ImageAdapter的getView中(扩展了ArrayAdapter), 我试图使用LayoutInflater来膨胀xml,然后我将其存储到ViewGroup中。我发现ViewByID()来获取xml中的imageView,并设置我们想要的imageView的属性。

如果我们继续膨胀这个xml文件,那么所有的id都是相同的。这是我们的问题。

  1. 如果我们删除带有的列表项 上下文菜单,它实际上删除 不正确的。测试显示 它主要是最后添加的, 但并非总是如此。
  2. EditText不响应键盘输入。有时,他们会存储一些数据,通常总是“bbb”。
  3. 我们有更多问题,但我们会在修复这些更严重的错误后回复。

    public View getView(int position, View convertView, ViewGroup parent)
        {
            final ImageView imageView;
            //InputStream is = null;
            final Context mContext = super.getContext();
            final AdapterItem item = super.getItem(position);
            final Uri imageUri = item.getUri();
            ViewGroup viewGroup = null;
    
            try
            {
                //-- If the view has not been created yet.
                if (convertView == null)
                {
                    /*
                     * Build the ImageView from the URI with some custom
                     * view settings.
                     */
    
                    viewGroup = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.mediauploadobject, null);
                    imageView = (ImageView) viewGroup.findViewById(R.id.imgView);
                    //imageView.setLayoutParams(new GridView.LayoutParams(IMAGE_WIDTH, IMAGE_HEIGHT));
                    imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                    imageView.setPadding(IMAGE_PADDING_LEFT, IMAGE_PADDING_TOP,
                            IMAGE_PADDING_RIGHT, IMAGE_PADDING_BOTTOM);
                    imageView.setDrawingCacheEnabled(true);
                    imageView.setClickable(true);
                    imageView.setFocusable(true);
                    imageView.setFocusableInTouchMode(true);
                    imageView.setSaveEnabled(false);
                    //the following two lines are required for the menu to popUp
                    imageView.setOnLongClickListener(new LongClickListener());
                    imageView.setOnCreateContextMenuListener(new LongClickMenu());
                    imageView.setOnClickListener(new ShortClickListener());
    
                    //the following two lines are required to put a boarder around the images
                    imageView.setOnTouchListener(new PictureOnTouchListener());
                    imageView.setOnFocusChangeListener(new PictureOnFocusChangeListener());
    
                    //-- Keep a reference to the ImageView by tagging it.
                    imageView.setTag(imageUri);
                }else
                {
                    //-- R-E-C-Y-C-L-E recycle!
                    viewGroup = (ViewGroup) convertView;
                    imageView = (ImageView) viewGroup.findViewById(R.id.imgView);
                }
    
                //-- Lazy load the images so the user doesn't have to wait for all of the querying non-sense
                //   that happens behind the scenes.
                imageView.setImageResource(android.R.drawable.gallery_thumb);
                imageView.post(new ImageLoader(imageUri, imageView));           
    
                //-- Be VERY careful when changing this code. Due to heap size issues,
                //   the size of the bitmap image MUST be modified with the
                //   provided BitmapFactory.Options or the program will
                //   crash often and frequent.
                //post
                //-- AJG 7/1/2010 added this assignment so we aren't always setting these preferences every
                //   iteration
                convertView = viewGroup;
            }catch(Throwable t)
            {
                Log.e(TAG, t.toString());
                return null;            
            }finally
            {
                //try{if(is != null)is.close();}catch(Exception squish){}
            }
    
            return viewGroup;
        }
    

1 个答案:

答案 0 :(得分:2)

默认情况下,子视图无法在列表视图中聚焦。这是为了防止奇怪的轨迹球/非触摸导航行为。这可能就是您的edittexts没有响应输入的原因。确保您正在调用ListView.setItemsCanFocus(true)方法。