2011-08-14 77 views
-1

enter image description here自定義ListView問題

嗨,我試圖編寫一個ListView,可以更改列大小。但是當我添加新行時,列表的第一行總是被插入。你可以幫我嗎?

更新:

我的問題是,當我點擊「插入記錄」,第一行是不再那麼其他行,爲什麼他們是不一樣的添加新行?

這裏是我的代碼:

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

你能解釋你的問題嗎? –

+0

同意Sherif。如果你甚至沒有提出你的問題,你希望我們如何幫助你? – Kheldar

+0

問題出現在附件的截圖上,當我點擊「插入記錄」時,第一行比其他行有更多的數據,它們應該有一定的長度 – eric2323223

回答

0

我建議你用一個ListActivity的活動,而不是爲你的類MyListActivity,你會實現你想要更容易做。看看這裏的教程想法List View on Android developers

+0

我需要動態更改列表項的列大小,而我發現默認的ArrayAdapter不能滿足我的需要。 – eric2323223