2011-08-14 5 views
-1

enter image description heresur mesure ListView problème

Salut, j'ai essayé d'écrire un ListView qui pourrait changer la taille de la colonne. Mais la première ligne de la liste est toujours insérée quand j'ajoute une nouvelle ligne. Pourrais-tu m'aider s'il te plaît?

mise à jour:

Mon problème est quand j'ajouter une nouvelle ligne en cliquant sur « Insérer un enregistrement », la première ligne est plus longue que d'autres lignes, pourquoi ils ne sont pas les mêmes?

Voici mon code:

MyListAdapter.java

package eric.android; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class MyListAdapter extends BaseAdapter{ 
    Context context; 
    List<Record> data = new ArrayList<Record>(); 

    public MyListAdapter(Context context){ 
     this.context = context; 
    } 

    public void setData(List<Record> d){ 
     this.data = d; 
    } 

    public List<Record> getData(){ 
     return this.data; 
    } 

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

    public Object getItem(int index) { 
     return data.get(index); 
    } 

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

    public void removeColumn(int index){ 
     for(Record record:data){ 
      record.removeData(index); 
     } 
    } 

    public View getView(int arg0, View convertView, ViewGroup arg2) { 
     if (convertView == null) { 
//   LayoutInflater inflater = (LayoutInflater) context 
//     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = new LinearLayout(context); 
      ((LinearLayout)convertView).setOrientation(LinearLayout.HORIZONTAL); 
     } 
     Record record = data.get(arg0); 
     for(String str: record.data()){ 
      TextView view = new TextView(context); 
      view.setText(str); 
      ((ViewGroup) convertView).addView(view); 
     } 
     return convertView; 
    } 

    public void addRecord(Record rec) { 
     Log.d("record",rec.toString()); 
     data.add(rec); 
    } 

    public void removeRecord(int index) { 
     data.remove(index); 
    } 

    public void addColumn(String d) { 
     for(Record record:data){ 
      record.insertData(d); 
     } 
    } 

} 

MyListActivity.java

package eric.android; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MyListActivity extends Activity { 
    MyListView list1; 
    Button b1, b2, b3, b4; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     list1 = (MyListView)findViewById(R.id.list1); 
     b1 = (Button)findViewById(R.id.button1); 
     b1.setOnClickListener(new OnClickListener(){ 
      public void onClick(View arg0) { 
       list1.addColumn("new added"); 
      } 
     }); 
     b2 = (Button)findViewById(R.id.button2); 
     b2.setOnClickListener(new OnClickListener(){ 
      public void onClick(View arg0) { 
       list1.removeColumn(0); 
      } 
     }); 
     b3 = (Button)findViewById(R.id.button3); 
     b3.setOnClickListener(new OnClickListener(){ 
      public void onClick(View arg0) { 
       list1.insertRecord("one,two,three"); 
      } 
     }); 
     b4 = (Button)findViewById(R.id.button4); 
     b4.setOnClickListener(new OnClickListener(){ 
      public void onClick(View arg0) { 
       list1.removeRecord(0); 
      } 
     }); 
    } 
} 

MyListView.java

package eric.android; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ListView; 

public class MyListView extends ListView { 
    Context context; 
    MyListAdapter adapter; 

    public MyListView(Context context, AttributeSet as){ 
     super(context, as); 
     this.context = context; 
    } 

    private MyListAdapter adapter(){ 
     if(adapter==null){ 
      adapter = new MyListAdapter(context); 
     } 
     return adapter; 
    } 

    public void insertRecord(Record rec){ 
     adapter().addRecord(rec); 
     update(); 
    } 

    public void insertRecord(String str){ 
     adapter().addRecord(new Record(str)); 
     update(); 
    } 

    public void removeRecord(int index){ 
     adapter().removeRecord(index); 
     update(); 
    } 

    public void removeColumn(int index){ 
     adapter().removeColumn(index); 
     update(); 
    } 

    public void addColumn(String d){ 
     adapter().addColumn(d); 
     update(); 
    } 

    public void update(){ 
     setAdapter(adapter()); 
    } 

} 

Record.java

package eric.android; 

import java.util.ArrayList; 
import java.util.List; 

public class Record { 
    List<String> data = new ArrayList<String>(); 

    public Record(List<String> d){ 
     data = d; 
    } 

    public Record(String str) { 
     for(String item:str.split(",")){ 
      data.add(item); 
     } 
    } 

    public void insertData(String str){ 
     data.add(str); 
    } 

    public void removeData(int x){ 
     data.remove(x); 
    } 

    public List<String> data() { 
     return data; 
    } 

    public String toString(){ 
     return data.toString(); 
    } 

} 
+0

Pouvez-vous expliquer votre problème? –

+0

D'accord avec Sherif. Comment voulez-vous que nous vous aidions si vous ne posez même pas votre question? – Kheldar

+0

Le problème est montré sur la capture d'écran ci-joint, lorsque je clique sur "Insérer un enregistrement", la première ligne a plus de données que d'autres lignes, ils doivent être la longueur – eric2323223

Répondre

0

Je vous suggère d'utiliser un ListActivity au lieu d'activité pour votre MyListActivity classe, vous obtiendrez ce que vous essayez de faire plus facilement. Jetez un oeil à ce tutoriel ici pour une idée List View on Android developers

+0

Je dois changer dynamiquement la taille des colonnes d'un élément de liste. trouvé l'ArrayAdapter par défaut ne peut pas répondre à mes besoins. – eric2323223