Faire R & D pour mon entreprise. Nous essayons d'avoir un listView qui contient une imageview, et deux cases d'édition pour chaque entrée dans la listview.Ajout d'un viewGroup à un 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>
Ceci est le fichier de mise en page que j'essaie d'utiliser pour l'élément qui sera dans la liste. Dans le getView de notre ImageAdapter (qui étend ArrayAdapter), j'essaye d'employer le LayoutInflater pour gonfler le xml, que je stocke alors dans un ViewGroup. Je trouve ViewByID() pour obtenir l'imageView dans le XML, et définir les propriétés de l'imageView que nous aimerions.
Si nous continuons à gonfler ce fichier xml, tous les identifiants seront les mêmes. Voici nos problèmes.
- Si on enlève un élément de liste avec un menu contextuel , il élimine en fait une incorrecte. Les tests montrent que c'est surtout le dernier ajouté, mais pas toujours.
- Les EditText ne répondent pas aux entrées au clavier. À l'occasion, ils stockent des données, généralement toujours «bbb».
Nous avons plus de problèmes, mais nous reviendrons après que nous ayons corrigé ces erreurs plus sérieuses.
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;
}
Pouvez-vous publier le code pour votre adaptateur. –
Si le problème concerne la suppression d'éléments, le code que vous utilisez pour supprimer des éléments peut vous aider à obtenir une réponse. Peu importe que les ID soient identiques, chaque élément de la liste aura une position unique dans la liste (ce qui est ce que vous utiliseriez pour supprimer un élément particulier). – kiswa
J'ai corrigé l'erreur de suppression. Le code de l'adaptateur est d'environ 450 lignes. Je vais supposer que vous préférez voir la partie getView du code. Edited mon message original avec le code. – DavidAndroidDev