2013-05-02 14 views

risposta

56

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 

    </ListView> 

</RelativeLayout> 

custom.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" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:layout_width="255dp" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 

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

       <TextView 
        android:id="@+id/title" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Video1" 
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:textColor="#339966" 
        android:textStyle="bold" /> 
      </LinearLayout> 

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

       <TextView 
        android:id="@+id/detail" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="video1" 
        android:textColor="#606060" /> 
      </LinearLayout> 
     </LinearLayout> 

     <ImageView 
      android:id="@+id/img" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 

    </LinearLayout> 

</LinearLayout> 

main.java pacchetto com.example.sample;

import android.app.Activity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 


public class MainActivity extends Activity { 

    ListView l1; 
    String[] t1={"video1","video2"}; 
    String[] d1={"lesson1","lesson2"}; 
    int[] i1 ={R.drawable.ic_launcher,R.drawable.ic_launcher}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     l1=(ListView)findViewById(R.id.list); 
     l1.setAdapter(new dataListAdapter(t1,d1,i1)); 
    } 

    class dataListAdapter extends BaseAdapter { 
     String[] Title, Detail; 
     int[] imge; 

     dataListAdapter() { 
      Title = null; 
      Detail = null; 
      imge=null; 
     } 

     public dataListAdapter(String[] text, String[] text1,int[] text3) { 
      Title = text; 
      Detail = text1; 
      imge = text3; 

     } 

     public int getCount() { 
      // TODO Auto-generated method stub 
      return Title.length; 
     } 

     public Object getItem(int arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 

      LayoutInflater inflater = getLayoutInflater(); 
      View row; 
      row = inflater.inflate(R.layout.custom, parent, false); 
      TextView title, detail; 
      ImageView i1; 
      title = (TextView) row.findViewById(R.id.title); 
      detail = (TextView) row.findViewById(R.id.detail); 
      i1=(ImageView)row.findViewById(R.id.img); 
      title.setText(Title[position]); 
      detail.setText(Detail[position]); 
      i1.setImageResource(imge[position]); 

      return (row); 
     } 
    } 
} 

provare questo ......

+0

i Usa questo codice, ma la seguente eccezione è stata sollevata java.lang.ArrayIndexOutOfBoundsException: length = 10; index = 10 –

+4

Devi usare ViewHolder per le prestazioni ... controlla questo http://stackoverflow.com/questions/19469073/how-do-you-efficiently-load-bitmaps-da -drawable-folder-into-a- listview/19469076 # 19469076 – Vrajesh

+2

non è in grado di ottenere getLayoutInflater(); –

6

Crea la tua classe BaseAdapter e usala come segue.

public class NotificationScreen extends Activity 
{ 

@Override 
protected void onCreate_Impl(Bundle savedInstanceState) 
{ 
    setContentView(R.layout.notification_screen); 

    ListView notificationList = (ListView) findViewById(R.id.notification_list); 
    NotiFicationListAdapter notiFicationListAdapter = new NotiFicationListAdapter(); 
    notificationList.setAdapter(notiFicationListAdapter); 

    homeButton = (Button) findViewById(R.id.home_button); 

} 

} 

Crea la tua classe BaseAdapter e il suo file xml separato.

public class NotiFicationListAdapter extends BaseAdapter 
{ 
private ArrayList<HashMap<String, String>> data; 
private LayoutInflater inflater=null; 


public NotiFicationListAdapter(ArrayList data) 
{ 
this.data=data;   
    inflater =(LayoutInflater)baseActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 



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



public Object getItem(int position) 
{ 
return position; 
} 



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



public View getView(int position, View convertView, ViewGroup parent) 
{ 
View vi=convertView; 
    if(convertView==null) 

    vi = inflater.inflate(R.layout.notification_list_item, null); 

    ImageView compleatImageView=(ImageView)vi.findViewById(R.id.complet_image); 
    TextView name = (TextView)vi.findViewById(R.id.game_name); // name 
    TextView email_id = (TextView)vi.findViewById(R.id.e_mail_id); // email ID 
    TextView notification_message = (TextView)vi.findViewById(R.id.notification_message); // notification message 



    compleatImageView.setBackgroundResource(R.id.address_book); 
    name.setText(data.getIndex(position)); 
    email_id.setText(data.getIndex(position)); 
    notification_message.setTextdata.getIndex(position)); 

    return vi; 
} 

    } 

File xml BaseAdapter.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/inner_layout" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_marginBottom="5dp" 
android:layout_marginLeft="10dp" 
android:layout_weight="4" 
android:background="@drawable/list_view_frame" 
android:gravity="center_vertical" 
android:padding="5dp" > 

<TextView 
    android:id="@+id/game_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Game name" 
    android:textColor="#FFFFFF" 
    android:textSize="15dip" 
    android:textStyle="bold" 
    android:typeface="sans" /> 

<TextView 
    android:id="@+id/e_mail_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/game_name" 
    android:layout_marginTop="1dip" 
    android:text="E-Mail Id" 
    android:textColor="#FFFFFF" 
    android:textSize="10dip" /> 

<TextView 
    android:id="@+id/notification_message" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/game_name" 
    android:layout_toRightOf="@id/e_mail_id" 
    android:paddingLeft="5dp" 
    android:text="Notification message" 
    android:textColor="#FFFFFF" 
    android:textSize="10dip" /> 



<ImageView 
    android:id="@+id/complet_image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:layout_marginBottom="30dp" 
    android:layout_marginRight="10dp" 
    android:src="@drawable/complete_tag" 
    android:visibility="invisible" /> 

</RelativeLayout> 

Sostituirlo di conseguenza e utilizzare.

4

suggerisco utilizzando un adattatore personalizzato, innanzitutto creare un file XML, ad esempio layout/customlistview.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" > 
    <ImageView 
     android:id="@+id/image" 
     android:layout_alignParentRight="true" 
     android:paddingRight="4dp" /> 
    <TextView 
     android:id="@+id/title" 
     android:layout_toLeftOf="@id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="23sp" 
     android:maxLines="1" /> 
    <TextView 
     android:id="@+id/subtitle" 
     android:layout_toLeftOf="@id/image" android:layout_below="@id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</RelativeLayout> 

Supponendo di avere una classe personalizzata come questo

public class CustomClass { 

    private long id; 
    private String title, subtitle, picture; 

    public CustomClass() { 
    } 

    public CustomClass (long id, String title, String subtitle, String picture) { 
     this.id = id; 
     this.title= title; 
     this.subtitle= subtitle; 
     this.picture= picture; 
    } 
    //add getters and setters 
} 

E un CustomAdapter.java utilizza l'XML layout

public class CustomAdapter extends ArrayAdapter { 

private Context context; 
private int resource; 
private LayoutInflater inflater; 

public CustomAdapter (Context context, List<CustomClass> values) { // or String[][] or whatever 

    super(context, R.layout.customlistviewitem, values); 

    this.context = context; 
    this.resource = R.layout.customlistview; 
    this.inflater = LayoutInflater.from(context); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    convertView = (RelativeLayout) inflater.inflate(resource, null); 

    CustomClass item = (CustomClass) getItem(position); 

    TextView textviewTitle = (TextView) convertView.findViewById(R.id.title); 
    TextView textviewSubtitle = (TextView) convertView.findViewById(R.id.subtitle); 
    ImageView imageview = (ImageView) convertView.findViewById(R.id.image); 

    //fill the textviews and imageview with the values 
    textviewTitle = item.getTtile(); 
    textviewSubtitle = item.getSubtitle(); 

    if (item.getAfbeelding() != null) { 
     int imageResource = context.getResources().getIdentifier("drawable/" + item.getImage(), null, context.getPackageName()); 
     Drawable image = context.getResources().getDrawable(imageResource); 
    } 
    imageview.setImageDrawable(image); 

    return convertView; 
    } 
} 

Sei riuscito a farlo? Sentitevi liberi di chiedere se volete maggiori informazioni su qualcosa :)

EDIT: Cambiato l'adattatore per adattarsi ad una lista invece di un elenco

+0

Mi scusi; per favore spiegami che come posso usare questa classe nella mia attività che contiene una listview chiamata "lv", e qual è lo scopo di "toerismelistviewitem" in questa riga: "super (context, R.layout.toerismelistviewitem, values);" –

+0

Salve, basta inserire il nome del file Xml, quindi nel tuo caso sarà super (contesto, R.layout.lv, valori) - Ho dimenticato di rinominarlo :) e ho appena ricevuto una lista valori ma probabilmente vuoi le tue stringhe in una lista con 2 dimensioni perché hai un titolo e un sottotitolo, puoi cambiarlo in qualunque cosa tu voglia, ricordalo. –

+0

Ho utilizzato un elenco anziché l'elenco in modo da fornire sia le stringhe che l'url per l'immagine. Vedi la mia modifica, spero sia chiaro ora ... –

15
public class ListElementAdapter extends BaseAdapter{ 

    String[] data; 
    Context context; 
    LayoutInflater layoutInflater; 


    public ListElementAdapter(String[] data, Context context) { 
     super(); 
     this.data = data; 
     this.context = context; 
     layoutInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 

     return data.length; 
    } 

    @Override 
    public Object getItem(int position) { 

     return null; 
    } 

    @Override 
    public long getItemId(int position) { 

     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 


     convertView= layoutInflater.inflate(R.layout.item, null); 

     TextView txt=(TextView)convertView.findViewById(R.id.text); 

     txt.setText(data[position]); 



     return convertView; 
    } 

} 

Può essere che vi aiuterà u ... Basta chiamare ListElementAdapter nella vostra attività principale e impostare l'adattatore a ListView.

+0

come posso usarlo? Adattatore listElementAdapter = new ListElementAdapter (array, this); non funzionerà in quanto estende BaseAdapter e BaseAdapter è una classe astratta – eawedat

+1

Poiché la risposta è troppo vecchia e ListView è deprecato in Android. Ti suggerirei - Usa invece la vista Recycler. Grazie –

4
private class ObjectAdapter extends BaseAdapter { 

    private Context context; 
    private List<Object>objects; 

    public ObjectAdapter(Context context, List<Object> objects) { 
     this.context = context; 
     this.objects = objects; 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 

     if(convertView==null){ 
      holder = new ViewHolder(); 
      convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false); 
      holder.text = (TextView) convertView.findViewById(android.R.id.text1); 
      convertView.setTag(holder); 
     }else{ 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.text.setText(getItem(position).toString())); 
     return convertView; 
    } 

    class ViewHolder { 
     TextView text; 
    } 
} 
+0

come posso usarlo? Adattatore ObjectAdapter = nuovo ObjectAdapter (questo, oggetti); non funzionerà in quanto estende BaseAdapter e BaseAdapter è una classe astratta – eawedat

Problemi correlati