2013-11-20 2 views
1

MainActivity 성취 :의 ListView는 네 개의 값은 단지 첫 번째는

public class MainActivity extends Activity { 

ListView lista; 
Context c; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    c=getApplicationContext(); 
    ArrayList<Seleccion> seleccion=new ArrayList<Seleccion>(); 
    seleccion.add(new Seleccion("David", "Fernández", R.drawable.ic_launcher)); 
    seleccion.add(new Seleccion("Fernando", "Pérez", R.drawable.ic_launcher)); 
    seleccion.add(new Seleccion("Antonio", "López", R.drawable.ic_launcher)); 
    seleccion.add(new Seleccion("María", "Domínguez", R.drawable.ic_launcher)); 
    ListaAdapter listAdapter=new ListaAdapter(c, seleccion); 
    lista=(ListView)findViewById(R.id.listView1); 
    lista.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 


     } 
    }); 
    lista.setAdapter(listAdapter); 

} 
} 

사용자 정의 어댑터 :

공용 클래스 ListaAdapter가 BaseAdapter {

private static int contador=0; 
ArrayList<Seleccion>seleccion; 
private LayoutInflater inflater = null; 

static class ViewHolder{ 
    TextView nombre; 
    TextView apellido; 
    int imagen; 
} 

public ListaAdapter(Context c, ArrayList<Seleccion> seleccion) { 
    Log.i("LISTA", "creating adapter"); 
    this.seleccion=seleccion; 
    inflater = LayoutInflater.from(c); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    Log.i("LIST", "Returned "+seleccion.size()+" results"); 
    return seleccion.size(); 
} 

@Override 
public Object getItem(int position) { 
    Log.i("LIST", "one item returned, name: "+seleccion.get(position).getNombre()); 
    return seleccion.get(position); 
} 

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

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

    ViewHolder holder; 

    if(convertView==null){ 

     convertView=inflater.inflate(R.layout.listitemlayout, null); 
     contador++; 
     Log.i("LIST", contador+" vews created"); 
     holder=new ViewHolder(); 
     holder.nombre=(TextView)convertView.findViewById(R.id.textView1); 
     holder.apellido=(TextView) convertView.findViewById(R.id.textView2); 
     holder.imagen=R.id.imageView1; 
     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder) convertView.getTag(); 
     Seleccion sel=(Seleccion)getItem(position); 
     Log.i("LIST", "Name "+sel.getNombre()); 
     holder.nombre.setText(sel.getNombre()); 
     holder.apellido.setText(sel.getApellidos()); 
     holder.imagen=sel.getImagen(); 
    } 

    return convertView; 
} 

} 

사용자 정의 어댑터의 레이아웃을 확장 :

<?xml version="1.0" encoding="utf-8"?> 
<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:src="@drawable/ic_launcher" /> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="false" 
    android:layout_alignTop="@drawable/ic_launcher" 
    android:layout_toRightOf="@+id/imageView1" 
    android:text="TextView" 
    android:textSize="20dp" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/textView1" 
    android:layout_below="@+id/textView1" 
    android:text="Small Text" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 

</RelativeLayout> 

그리고 MainActivity 레이아웃...

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

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

</LinearLayout> 

나는 테이블에 네 개의 행을 얻을 수 있지만 첫 번째는 값을 받고있다. 나머지는 어댑터 레이아웃에 설정된 기본 텍스트로 유지됩니다. 나는 어디에서 오류인지 알지 못한다. .. 어떤 도움? 고맙습니다.

답변

0
이 귀하의 getView를 변경

:

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

    ViewHolder holder; 

    if(convertView==null){ 

     convertView=inflater.inflate(R.layout.listitemlayout, null); 
     contador++; 
     Log.i("LIST", contador+" vews created"); 
     holder=new ViewHolder(); 
     holder.nombre=(TextView)convertView.findViewById(R.id.textView1); 
     holder.apellido=(TextView) convertView.findViewById(R.id.textView2); 
     holder.imagen=R.id.imageView1; 
     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 

     Seleccion sel=(Seleccion)getItem(position); 
     Log.i("LIST", "Name "+sel.getNombre()); 
     holder.nombre.setText(sel.getNombre()); 
     holder.apellido.setText(sel.getApellidos()); 
     holder.imagen=sel.getImagen(); 

    return convertView; 
} 
+0

신 오에 ... 감사합니다. 내가 그걸 놓쳤다 고 생각하지 않아. – Fustigador

0

같은 증상하지만 서로 다른 원인을 나를 위해. 필자는 단편 레이아웃을 match_parent 대신 제어 된 높이로 변경하여 문제를 해결했습니다.

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:orientation="horizontal" > 
관련 문제