2014-09-04 8 views
0

Je voudrais insérer une petite image à droite de chaque élément dans un listview essentiellement mon application devrait le faire dès que l'utilisateur clique sur un élément dans la vue de la liste, l'image devient visible, sinon il doit rester invisible .comment insérer une image dans un listview?

ci-dessous est mon activité avec son XML

Activité

public class EpisodiActivity extends Activity { 

public class ViewModel { 
    private String url; 
    private String name; 

    public ViewModel(String url, String name) { 
     this.url = url; 
     this.name = name; 
    } 

    public String getUrl() { 
     return this.url; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String toString() { 
     return this.name; 
    } 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //creazione fullscreen activity 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.episodi_activity); 

    String[] episodi = getIntent().getStringArrayExtra("Product"); 
    String[] urls = getIntent().getStringArrayExtra("urls"); 

    ListView mylist = (ListView) findViewById(R.id.listView1); 


    // And in this loop we create the ViewModel instances from 
    // the name and url and add them all to a List 
    List<ViewModel> models = new ArrayList<ViewModel>(); 
    for (int i = 0; i < episodi.length; i++) { 
     String name = episodi[i]; 
     String url = "No value"; 
     if (i < urls.length) { 
      url = urls[i]; 
     } 
     ViewModel model = new ViewModel(url, name); 
     models.add(model); 
    } 


    // Here we create the ArrayAdapter and assign it to the ListView 
    // We pass the List of ViewModel instances into the ArrayAdapter 
    final ArrayAdapter<ViewModel> adapter = new ArrayAdapter<ViewModel>(this, android.R.layout.simple_list_item_1, models); 

    mylist.setAdapter(adapter); 


    mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { 

      // Here we get the ViewModel at the given position 
      ViewModel model = (ViewModel) arg0.getItemAtPosition(position); 

      // And the url from the ViewModel 
      String url = model.getUrl(); 

      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
     } 
    }); 
} 

XML

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

<ListView 
    android:id="@+id/listView1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@id/pubblicita" 
    android:cacheColorHint="#ffd700" 
    android:background="@drawable/sfondobottone" /> 

+0

voir ma réponse, je l'espère vous aide – Jamil

Répondre

-1

Vous pouvez définir ici sur XML comme celui-ci

android:visibility="visible" 

ou

android:visibility="invisible" 

ou

android:visibility="gone" 

programme Java:

ImageView imgView = (ImageView)findViewById(R.id.custom); 

mis votre ImageView comme celui-ci

imgView .setVisibility(View.VISIBLE); 


imgView .setVisibility(View.INVISIBLE); 


imgView .setVisibility(View.GONE); 

D l'écart entre INVISIBLE et GONE.

INVISIBLE - Le widget est invisible, mais l'espace pour le widget sera affichée.

GONE - l'espace et widget est invisible.

Maintenant, vous pouvez brancher votre setOnItemClickListener()

listview.setOnItemClickListener(new OnItemClickListener() 
{ 
@Override 
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) 
{ 
    imgView .setVisibility(View.VISIBLE); 
} 
}); 
+0

je ne comprends pas pourquoi il y a un vote vers le bas, la réponse explique clairement comment faire un imageview 'Invisible' et sur le point listview cliquez rendre cette imageview 'Visible'. –

1

Je pense que vous voulez ce genre de sortie dans listview

texte avec image dans listview

enter image description here

Vous pouvez utiliser ListView personnalisé. Faire est le exmaple que j'utilise

Votre BaseAdapter

import java.util.ArrayList; 

import android.content.Context; 
import android.graphics.Bitmap; 
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 FrontListBaseAdapter extends BaseAdapter { 
    private static ArrayList<FrontDetails> itemDetailsrrayList; 

    private LayoutInflater l_Inflater; 

    public FrontListBaseAdapter(Context context, ArrayList<FrontDetails> results) { 
     itemDetailsrrayList = results; 
     l_Inflater = LayoutInflater.from(context); 
    } 

    public int getCount() { 
     return itemDetailsrrayList.size(); 
    } 

    public Object getItem(int position) { 
     return itemDetailsrrayList.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

     // get the views in frontview xml file where you have 
     // define multiple views that will appear in listview each row 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
     convertView = l_Inflater.inflate(R.layout.frontview, null); 
     holder = new ViewHolder(); 
     holder.Image = (ImageView) convertView.findViewById(R.id.adminpic1); 
     holder.MsgType = (TextView) convertView.findViewById(R.id.msgtype1); 

     convertView.setTag(holder); 
     } else { 
     holder = (ViewHolder) convertView.getTag(); 
     } 


     holder.Image.setImageResource(R.drawable.mainlogo); // you can set your setter here 
     holder.MsgType.setText(itemDetailsrrayList.get(position).getMsgType()); 

     return convertView; 
    } 

    // holder view for views 
    static class ViewHolder { 
     ImageView Image; 
     TextView MsgType; 
    } 
    } 

votre FrontDetails classe où vous ferez des accesseurs et cette classe sera utilisé une classe qui étend la classe BaseAdapter

ici en définitive ArrayList resultse = new ArrayList();

import android.graphics.Bitmap; 

public class FrontDetails { 

    public int getImage() { 
    return image; 
    } 
    public void setImage(int imageN) { 
    this.image = imageN; 
    } 


    public String getMsgType() { 
    return MsgType; 
    } 
    public void setMsgType(String text) { 
    this.MsgType = text; 
    } 



    private int image; 
    private String MsgType; 

    } 

votre frontview.XML où vous mettez vos multiples points de vue qui seront dans chaque ligne ou votre mise en page

<?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="100dp" 
    android:orientation="vertical" 
    android:layout_margin="10dp" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="80dp" > 

     <ImageView 
      android:id="@+id/adminpic1" 
      android:layout_width="60dp" 
      android:layout_height="60dp" 
      android:src="@drawable/ic_launcher" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 



      <TextView 
       android:id="@+id/msgtype1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="5dp" 
       android:layout_marginTop="4dp" 
       android:textSize="1sp" 
       android:text="MsgType" /> 


     </LinearLayout> 

    </LinearLayout> 

</LinearLayout> 

et votre listview dans xml

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

    <Button 
     android:id="@+id/sync" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Sync" /> 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp" > 
    </ListView> 

</LinearLayout> 

maintenant dans votre activité principale

final ArrayList<FrontDetails> resultse = new ArrayList<FrontDetails>(); 
FrontListBaseAdapter asdf = new FrontListBaseAdapter(context, resultse); 
       lv1.setAdapter(new FrontListBaseAdapter(Front.this, resultse)); 


lv1.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> arg0, View arg1, 
         int position, long arg3) { 

        Object o = lv1.getItemAtPosition(position); 
        FrontDetails obj_itemDetails = (FrontDetails)o; 
        Toast.makeText(context, "You have chosen " + ' ' + obj_itemDetails.getMsgType(), Toast.LENGTH_LONG).show(); 

    } 
     }); 

EDIT: De là, j'ai appris Custom Listview son un exemple simple avec l'image

http://www.javasrilankansupport.com/2012/05/android-listview-example-with-image-and.html

http://www.javacodegeeks.com/2012/10/android-listview-example-with-image-and.html

0

Je peux donner quelques conseils, mais n'a malheureusement pas pu vous aider par exemple ..

tout d'abord créer un adaptateur personnalisé (étend BaseAdapter) suivi d'une mise en page personnalisée. Ici, la mise en page personnalisée contient la vue de texte et une vue d'image (par défaut invisible) à droite.

Il suffit de personnaliser l'affichage de la liste avec votre adaptateur et mettre le texte à l'intérieur TextView par vue get() ..

Enfin dans votre listItemClickListener rendre l'image visible par sa position.

1

Utilisez listview personnalisé avec BaseAdapter

Votre adaptateur

public class CustomBaseAdapter extends BaseAdapter { 
Context context; 
List<RowItem> rowItems; 

public CustomBaseAdapter(Context context, List<RowItem> items) { 
    this.context = context; 
    this.rowItems = items; 
} 

/*private view holder class*/ 
private class ViewHolder { 
    ImageView imageView; 
    TextView txtTitle; 
    TextView txtDesc; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 

    LayoutInflater mInflater = (LayoutInflater) 
     context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.list_item, null); 
     holder = new ViewHolder(); 
     holder.txtDesc = (TextView) convertView.findViewById(R.id.desc); 
     holder.txtTitle = (TextView) convertView.findViewById(R.id.title); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.icon); 
     convertView.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    RowItem rowItem = (RowItem) getItem(position); 

    holder.txtDesc.setText(rowItem.getDesc()); 
    holder.txtTitle.setText(rowItem.getTitle()); 
    holder.imageView.setImageResource(rowItem.getImageId()); 

    return convertView; 
} 

@Override 
public int getCount() {  
    return rowItems.size(); 
} 

@Override 
public Object getItem(int position) { 
    return rowItems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return rowItems.indexOf(getItem(position)); 
} 

}

Votre list_item.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="fill_parent" > 

<ImageView 
    android:id="@+id/icon" 
    android:layout_width="80dp" 
    android:layout_height="80dp" 
    android:contentDescription="@string/image" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" /> 

<TextView 
    android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/icon" 
    android:paddingBottom="10dp" 
    android:textColor="#CC0033" 
    android:textSize="16dp" /> 

<TextView 
    android:id="@+id/desc" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/title" 
    android:layout_toRightOf="@+id/icon" 
    android:paddingLeft="10dp" 
    android:textColor="#3399FF" 
    android:textSize="14dp" /> 

</RelativeLayout> 

Votre seule classe d'élément de ligne

public class RowItem { 
private int imageId; 
private String title; 
private String desc; 

public RowItem(int imageId, String title, String desc) { 
    this.imageId = imageId; 
    this.title = title; 
    this.desc = desc; 
} 
public int getImageId() { 
    return imageId; 
} 
public void setImageId(int imageId) { 
    this.imageId = imageId; 
} 
public String getDesc() { 
    return desc; 
} 
public void setDesc(String desc) { 
    this.desc = desc; 
} 
public String getTitle() { 
    return title; 
} 
public void setTitle(String title) { 
    this.title = title; 
} 
@Override 
public String toString() { 
    return title + "\n" + desc; 
} 
} 

liste Voir la mise en œuvre

listView = (ListView) findViewById(R.id.list); 
    CustomBaseAdapter adapter = new CustomBaseAdapter(this, rowItems); 
    listView.setAdapter(adapter); 
Questions connexes