2012-02-17 8 views
1

J'utilise ce code pour mon simple, ListView maintenant:Comment faire ListView avec CheckBox et Image?

final ListView lv = (ListView)findViewById(R.id.apps_list); 
     lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, myString.split("\n"))); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

      } 
     }); 

et mise en page:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     style="?android:attr/listSeparatorTextViewStyle" 
     android:id="@+id/separator_apps" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/apps" /> 


    <ListView 
     android:id="@+id/apps_list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/separator_apps" > 

    </ListView> 

</RelativeLayout> 

Mais je dois ajouter une image et CheckBox à chaque ligne de CE ListView, quelqu'un pourrait me donner un bon exemple?

+0

http://www.vogella.de/articles/AndroidListView/article.html –

+0

référez-vous à ceci: http: //stackoverflow.com/questions/4797926/how-to-make-a-listactivity-with- custom-list-item-with-nested-clickable-button.Il est similaire à votre problème.vous avez juste besoin de remplacer le bouton par case à cocher et TextView par image. – Hiral

+0

Merci, je vais le regarder. – Adam

Répondre

1

vous devez créer votre propre adaptateur personnalisé pour charger les vues d'image et les composants de case à cocher à chaque élément, apprendre quelques notions de base concernant la création de carte personnalisée dans android.

Rest, vous devez gérer case à cocher, voir ma solution plus tôt:

How to use checkbox in listview

1

Je préfère utiliser TableLayout au lieu de ListView pour montrer les cases à cocher, parce que les cases cochées seront réutilise utilisateur fait défiler à chaque fois que les listview, vous devrez donc mettre en cache toutes les données des cases à cocher. Toutefois, si vous souhaitez utiliser des images ou d'autres vues statiques, ListView peut être utilisé.

Le code ressemblera à ceci pour la case à cocher et les images, si vous avez une méthode pour cacher les données des cases à cocher.

public class SDLibrary extends Activity { 
ArrayList<LinearLayout> layout; 
Context ctx; 
ListView sdlistv; 
private int[] bitmapArray; 
String[] mFiles; 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sdlay); 
    ctx=this; 
    ListView sdlistv=(ListView) findViewById(R.id.list); 
    layout=new ArrayList<LinearLayout>(); 

    for(int i=0;i<bitmapArray.length;i++){ 
     LinearLayout ll=new LinearLayout(this); 
     layout.add(ll); 
    } 
    CustomAdapter ca=new CustomAdapter(this, R.id.linear, layout); 
    sdlistv.setAdapter(ca); 
    sdlistv.setFadingEdgeLength(40); 
} 
private class CustomAdapter extends ArrayAdapter<LinearLayout>{ 

    public CustomAdapter(Context context, int resources, List<LinearLayout> objects){ 
     super(context, resources, objects); 
    } 
    public View getView(int position, View convertView, ViewGroup parent){ 
     LinearLayout row; 

     LayoutInflater mInflater = getLayoutInflater(); 
     if (convertView == null){ 
      row = getItem(position); 
     } 
     else{ 
      row = (LinearLayout) mInflater.inflate(R.layout.sdlay, null); 
     } 
     ImageView imageView =new ImageView(ctx); 
     CheckBox cb=new CheckBox(ctx); 
     imageView.setImageResource(bitmapArray[position]); //bitmapArray would be the array of images from the drawable 
     imgData.add(imageView); 
     row.addView(cb); 
     row.addView(imageView); 
     return row; 
    } 
} 
} 

sdlay.xml ressemblera à ceci: -

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 
<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
/> 

<LinearLayout 
android:id="@+id/linear" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
> 
</LinearLayout> 
</LinearLayout> 
+0

Note: J'ai donné un ancien code qui a fonctionné pour moi, sauf le problème de recyclage que j'ai mentionné. Si ce code ne fonctionne pas, faites le moi savoir. – noob

1

Merci à @Lalit Poptani des tutoriels.

Je l'ai résolu avec ce code:

Créer nouvelle classe:

public class AppsArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 

    private final String DefaultApps = "def_apps"; 

    public AppsArrayAdapter(Context context, String[] values) { 
     super(context, R.layout.apps, values); 
     this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     SharedPreferences myPrefsApps =context.getSharedPreferences("myPrefsApps", Context.MODE_PRIVATE); 
     String prefNameDefaultApps = myPrefsApps.getString(DefaultApps, ""); 
     String prefNameDefaultAppsVer = myPrefsApps.getString(DefaultAppsVer, ""); 


     LayoutInflater inflater = (LayoutInflater)context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.apps, parent, false); 
     TextView text_apps = (TextView)rowView.findViewById(R.id.text_apps); 
     CheckBox check = (CheckBox)rowView.findViewById(R.id.check_apps); 
     text_apps.setText(prefNameDefaultApps.split("\n")[position]); 

     return rowView; 
    } 
} 

Ensuite, créez xml:

<?xml version="1.0" encoding="UTF-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/text_apps" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 


    <CheckBox 
     android:id="@+id/check_apps" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" /> 

</RelativeLayout> 

Et dans votre activité à onCreate (par exemple) ajoutez ce code :

SharedPreferences myPrefsApps = AppsActivity.this.getSharedPreferences("myPrefsApps", MODE_PRIVATE); 
String prefNameDefaultApps = myPrefsApps.getString(DefaultApps, ""); 

      AppsArrayAdapter adapter = new AppsArrayAdapter(this, prefNameDefaultApps.split("\n")); 
      setListAdapter(adapter); 
1

Trouvé ce super tutoriel. Essayez this

Questions connexes