Android 自定义列表视图问题

Android 自定义列表视图问题,android,listview,listadapter,Android,Listview,Listadapter,您好,我尝试编写一个可以更改列大小的ListView。但列表的第一行总是在我添加新行时插入。你能帮帮我吗 更新: 我的问题是,当我通过单击“插入记录”添加新行时,第一行比其他行长,为什么它们不一样 这是我的密码: MyListAdapter.java package eric.android; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.ut

您好,我尝试编写一个可以更改列大小的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);
        }
    }

}
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);
            }
        });
    }
}
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());
    }

}
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();
    }

}
MyListView.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);
        }
    }

}
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);
            }
        });
    }
}
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());
    }

}
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();
    }

}
Record.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);
        }
    }

}
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);
            }
        });
    }
}
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());
    }

}
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();
    }

}
package eric.android;
导入java.util.ArrayList;
导入java.util.List;
公开课记录{
列表数据=新的ArrayList();
公共记录(名单d){
数据=d;
}
公共记录(字符串str){
对于(字符串项:str.split(“,”)){
数据。添加(项目);
}
}
公共void insertData(字符串str){
添加数据(str);
}
公共无效删除数据(int x){
数据。删除(x);
}
公共列表数据(){
返回数据;
}
公共字符串toString(){
返回data.toString();
}
}

我建议您在类MyListActivity中使用ListActivity而不是Activity,这样您可以更轻松地完成您想要完成的任务。看一下这里的教程,了解一些想法

你能解释一下你的问题吗?同意谢里夫的观点。如果您甚至没有陈述您的问题,您希望我们如何帮助您?问题显示在所附的屏幕截图上,当我单击“插入记录”时,第一行的数据比其他行多,它们应该有一些长度,我需要动态更改列表项的列大小,我发现默认的ArrayAdapter无法满足我的需要。