Java Android SQLite自定义适配器和自定义ListView
我是一个非常新的android开发者,我一直在尝试通过创建简单的应用程序来学习它 现在,我一直在尝试为我的应用程序创建自定义列表视图 我的数据存储在SQLite中,我将这些数据称为列表。我似乎找不到一个网站来演示如何让SQLite数据与自定义ListView一起工作 下面是我的数据,我希望有人能帮助我设置自定义适配器以使用sqlite数据 Records.javaJava Android SQLite自定义适配器和自定义ListView,java,android,android-sqlite,android-adapter,Java,Android,Android Sqlite,Android Adapter,我是一个非常新的android开发者,我一直在尝试通过创建简单的应用程序来学习它 现在,我一直在尝试为我的应用程序创建自定义列表视图 我的数据存储在SQLite中,我将这些数据称为列表。我似乎找不到一个网站来演示如何让SQLite数据与自定义ListView一起工作 下面是我的数据,我希望有人能帮助我设置自定义适配器以使用sqlite数据 Records.java public class Records { private long id; private String nam
public class Records {
private long id;
private String name;
private String type;
private float mf;
private float mftop;
private float mfbot;
private float mfleft;
private float mfright;
private float rf;
private float rftop;
private float rfbot;
private float rfleft;
private float rfright;
private float tb;
private float tbtop;
private float tbbot;
private float tbleft;
private float tbright;
private float bridge;
private float bridgel;
private float bridger;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
// Middle Finger
public float getMF() {
return mf;
}
public void setMF(float mf) {
this.mf = mf;
}
public float getMFTop() {
return mftop;
}
public void setMFTop(float mftop) {
this.mftop = mftop;
}
public float getMFBot() {
return mfbot;
}
public void setMFBot(float mfbot) {
this.mfbot = mfbot;
}
public float getMFLeft() {
return mfleft;
}
public void setMFLeft(float mfleft) {
this.mfleft = mfleft;
}
public float getMFRight() {
return mfright;
}
public void setMFRight(float mfright) {
this.mfright = mfright;
}
//Ring Finger
public float getRF() {
return rf;
}
public void setRF(float rf) {
this.rf = rf;
}
public float getRFTop() {
return rftop;
}
public void setRFTop(float rftop) {
this.rftop = rftop;
}
public float getRFBot() {
return rfbot;
}
public void setRFBot(float rfbot) {
this.rfbot = rfbot;
}
public float getRFLeft() {
return rfleft;
}
public void setRFLeft(float rfleft) {
this.rfleft = rfleft;
}
public float getRFRight() {
return rfright;
}
public void setRFRight(float rfright) {
this.rfright = rfright;
}
//Thumb
public float getTB() {
return tb;
}
public void setTB(float tb) {
this.tb = tb;
}
public float getTBTop() {
return tbtop;
}
public void setTBTop(float tbtop) {
this.tbtop = tbtop;
}
public float getTBBot() {
return tbbot;
}
public void setTBBot(float tbbot) {
this.tbbot = tbbot;
}
public float getTBLeft() {
return tbleft;
}
public void setTBLeft(float tbleft) {
this.tbleft = tbleft;
}
public float getTBRight() {
return tbright;
}
public void setTBRight(float tbright) {
this.tbright = tbright;
}
//Bridge
public float getBridge() {
return bridge;
}
public void setBridge(float bridge) {
this.bridge = bridge;
}
public float getBridgeL() {
return bridgel;
}
public void setBridgeL(float bridgel) {
this.bridgel = bridgel;
}
public float getBridgeR() {
return bridger;
}
public void setBridgeR(float bridger) {
this.bridger = bridger;
}
//Will be used by the ArrayAdapter in the ListView
@Override
public String toString() {
return name;
}
}
public class CustomAdapter extends ArrayAdapter<NTAdapter> {
Context context;
int layoutResourceId;
NTAdapter data[] = null;
public CustomAdapter(Context context, int layoutResourceId, NTAdapter[] data) {
super(context, layoutResourceId, data);
// TODO Auto-generated constructor stub
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
DataHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new DataHolder();
holder.dataName = (TextView)row.findViewById(R.id.dataName);
holder.dataType = (TextView)row.findViewById(R.id.dataType);
row.setTag(holder);
} else {
holder = (DataHolder)row.getTag();
}
NTAdapter ntadapter = data[position];
holder.dataName.setText(ntadapter.name);
holder.dataType.setText(ntadapter.type);
return row;
}
static class DataHolder {
TextView dataName;
TextView dataType;
}
}
public class NTAdapter {
public int id;
public String name, type;
public NTAdapter() {
super();
}
public NTAdapter(int id, String name, String type) {
super();
this.id = id;
this.name = name;
this.type = type;
}
}
public class DataLayout extends ListActivity {
private RecordsDataSource datasource;
Button btnDataCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data_layout);
datasource = new RecordsDataSource(this);
datasource.open();
List<Records> values = datasource.getAllRecords();
//use the SimpleCursorAdapter to show the
//elements in a ListView
ArrayAdapter<Records> adapter = new ArrayAdapter<Records>(this, android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
/**
CustomAdapter adapter = new CustomAdapter(this, R.layout.data_layout_listview, values);
listView1 = (ListView)findViewById(R.id.listView1);
listView1.setAdapter(adapter);
*/
Button btnDataCancel = (Button)findViewById(R.id.btnDataCancel);
//Cancel Button
btnDataCancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Starting a new Intent
Intent goMain = new Intent(getApplicationContext(), MainActivity.class);
startActivity(goMain);
finish();
}
});
}
@Override
protected void onResume() {
datasource.open();
super.onResume();
}
@Override
protected void onPause() {
datasource.close();
super.onPause();
}
}
CustomAdapter.java
public class Records {
private long id;
private String name;
private String type;
private float mf;
private float mftop;
private float mfbot;
private float mfleft;
private float mfright;
private float rf;
private float rftop;
private float rfbot;
private float rfleft;
private float rfright;
private float tb;
private float tbtop;
private float tbbot;
private float tbleft;
private float tbright;
private float bridge;
private float bridgel;
private float bridger;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
// Middle Finger
public float getMF() {
return mf;
}
public void setMF(float mf) {
this.mf = mf;
}
public float getMFTop() {
return mftop;
}
public void setMFTop(float mftop) {
this.mftop = mftop;
}
public float getMFBot() {
return mfbot;
}
public void setMFBot(float mfbot) {
this.mfbot = mfbot;
}
public float getMFLeft() {
return mfleft;
}
public void setMFLeft(float mfleft) {
this.mfleft = mfleft;
}
public float getMFRight() {
return mfright;
}
public void setMFRight(float mfright) {
this.mfright = mfright;
}
//Ring Finger
public float getRF() {
return rf;
}
public void setRF(float rf) {
this.rf = rf;
}
public float getRFTop() {
return rftop;
}
public void setRFTop(float rftop) {
this.rftop = rftop;
}
public float getRFBot() {
return rfbot;
}
public void setRFBot(float rfbot) {
this.rfbot = rfbot;
}
public float getRFLeft() {
return rfleft;
}
public void setRFLeft(float rfleft) {
this.rfleft = rfleft;
}
public float getRFRight() {
return rfright;
}
public void setRFRight(float rfright) {
this.rfright = rfright;
}
//Thumb
public float getTB() {
return tb;
}
public void setTB(float tb) {
this.tb = tb;
}
public float getTBTop() {
return tbtop;
}
public void setTBTop(float tbtop) {
this.tbtop = tbtop;
}
public float getTBBot() {
return tbbot;
}
public void setTBBot(float tbbot) {
this.tbbot = tbbot;
}
public float getTBLeft() {
return tbleft;
}
public void setTBLeft(float tbleft) {
this.tbleft = tbleft;
}
public float getTBRight() {
return tbright;
}
public void setTBRight(float tbright) {
this.tbright = tbright;
}
//Bridge
public float getBridge() {
return bridge;
}
public void setBridge(float bridge) {
this.bridge = bridge;
}
public float getBridgeL() {
return bridgel;
}
public void setBridgeL(float bridgel) {
this.bridgel = bridgel;
}
public float getBridgeR() {
return bridger;
}
public void setBridgeR(float bridger) {
this.bridger = bridger;
}
//Will be used by the ArrayAdapter in the ListView
@Override
public String toString() {
return name;
}
}
public class CustomAdapter extends ArrayAdapter<NTAdapter> {
Context context;
int layoutResourceId;
NTAdapter data[] = null;
public CustomAdapter(Context context, int layoutResourceId, NTAdapter[] data) {
super(context, layoutResourceId, data);
// TODO Auto-generated constructor stub
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
DataHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new DataHolder();
holder.dataName = (TextView)row.findViewById(R.id.dataName);
holder.dataType = (TextView)row.findViewById(R.id.dataType);
row.setTag(holder);
} else {
holder = (DataHolder)row.getTag();
}
NTAdapter ntadapter = data[position];
holder.dataName.setText(ntadapter.name);
holder.dataType.setText(ntadapter.type);
return row;
}
static class DataHolder {
TextView dataName;
TextView dataType;
}
}
public class NTAdapter {
public int id;
public String name, type;
public NTAdapter() {
super();
}
public NTAdapter(int id, String name, String type) {
super();
this.id = id;
this.name = name;
this.type = type;
}
}
public class DataLayout extends ListActivity {
private RecordsDataSource datasource;
Button btnDataCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data_layout);
datasource = new RecordsDataSource(this);
datasource.open();
List<Records> values = datasource.getAllRecords();
//use the SimpleCursorAdapter to show the
//elements in a ListView
ArrayAdapter<Records> adapter = new ArrayAdapter<Records>(this, android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
/**
CustomAdapter adapter = new CustomAdapter(this, R.layout.data_layout_listview, values);
listView1 = (ListView)findViewById(R.id.listView1);
listView1.setAdapter(adapter);
*/
Button btnDataCancel = (Button)findViewById(R.id.btnDataCancel);
//Cancel Button
btnDataCancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Starting a new Intent
Intent goMain = new Intent(getApplicationContext(), MainActivity.class);
startActivity(goMain);
finish();
}
});
}
@Override
protected void onResume() {
datasource.open();
super.onResume();
}
@Override
protected void onPause() {
datasource.close();
super.onPause();
}
}
DataLayout.java
public class Records {
private long id;
private String name;
private String type;
private float mf;
private float mftop;
private float mfbot;
private float mfleft;
private float mfright;
private float rf;
private float rftop;
private float rfbot;
private float rfleft;
private float rfright;
private float tb;
private float tbtop;
private float tbbot;
private float tbleft;
private float tbright;
private float bridge;
private float bridgel;
private float bridger;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
// Middle Finger
public float getMF() {
return mf;
}
public void setMF(float mf) {
this.mf = mf;
}
public float getMFTop() {
return mftop;
}
public void setMFTop(float mftop) {
this.mftop = mftop;
}
public float getMFBot() {
return mfbot;
}
public void setMFBot(float mfbot) {
this.mfbot = mfbot;
}
public float getMFLeft() {
return mfleft;
}
public void setMFLeft(float mfleft) {
this.mfleft = mfleft;
}
public float getMFRight() {
return mfright;
}
public void setMFRight(float mfright) {
this.mfright = mfright;
}
//Ring Finger
public float getRF() {
return rf;
}
public void setRF(float rf) {
this.rf = rf;
}
public float getRFTop() {
return rftop;
}
public void setRFTop(float rftop) {
this.rftop = rftop;
}
public float getRFBot() {
return rfbot;
}
public void setRFBot(float rfbot) {
this.rfbot = rfbot;
}
public float getRFLeft() {
return rfleft;
}
public void setRFLeft(float rfleft) {
this.rfleft = rfleft;
}
public float getRFRight() {
return rfright;
}
public void setRFRight(float rfright) {
this.rfright = rfright;
}
//Thumb
public float getTB() {
return tb;
}
public void setTB(float tb) {
this.tb = tb;
}
public float getTBTop() {
return tbtop;
}
public void setTBTop(float tbtop) {
this.tbtop = tbtop;
}
public float getTBBot() {
return tbbot;
}
public void setTBBot(float tbbot) {
this.tbbot = tbbot;
}
public float getTBLeft() {
return tbleft;
}
public void setTBLeft(float tbleft) {
this.tbleft = tbleft;
}
public float getTBRight() {
return tbright;
}
public void setTBRight(float tbright) {
this.tbright = tbright;
}
//Bridge
public float getBridge() {
return bridge;
}
public void setBridge(float bridge) {
this.bridge = bridge;
}
public float getBridgeL() {
return bridgel;
}
public void setBridgeL(float bridgel) {
this.bridgel = bridgel;
}
public float getBridgeR() {
return bridger;
}
public void setBridgeR(float bridger) {
this.bridger = bridger;
}
//Will be used by the ArrayAdapter in the ListView
@Override
public String toString() {
return name;
}
}
public class CustomAdapter extends ArrayAdapter<NTAdapter> {
Context context;
int layoutResourceId;
NTAdapter data[] = null;
public CustomAdapter(Context context, int layoutResourceId, NTAdapter[] data) {
super(context, layoutResourceId, data);
// TODO Auto-generated constructor stub
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
DataHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new DataHolder();
holder.dataName = (TextView)row.findViewById(R.id.dataName);
holder.dataType = (TextView)row.findViewById(R.id.dataType);
row.setTag(holder);
} else {
holder = (DataHolder)row.getTag();
}
NTAdapter ntadapter = data[position];
holder.dataName.setText(ntadapter.name);
holder.dataType.setText(ntadapter.type);
return row;
}
static class DataHolder {
TextView dataName;
TextView dataType;
}
}
public class NTAdapter {
public int id;
public String name, type;
public NTAdapter() {
super();
}
public NTAdapter(int id, String name, String type) {
super();
this.id = id;
this.name = name;
this.type = type;
}
}
public class DataLayout extends ListActivity {
private RecordsDataSource datasource;
Button btnDataCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data_layout);
datasource = new RecordsDataSource(this);
datasource.open();
List<Records> values = datasource.getAllRecords();
//use the SimpleCursorAdapter to show the
//elements in a ListView
ArrayAdapter<Records> adapter = new ArrayAdapter<Records>(this, android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
/**
CustomAdapter adapter = new CustomAdapter(this, R.layout.data_layout_listview, values);
listView1 = (ListView)findViewById(R.id.listView1);
listView1.setAdapter(adapter);
*/
Button btnDataCancel = (Button)findViewById(R.id.btnDataCancel);
//Cancel Button
btnDataCancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Starting a new Intent
Intent goMain = new Intent(getApplicationContext(), MainActivity.class);
startActivity(goMain);
finish();
}
});
}
@Override
protected void onResume() {
datasource.open();
super.onResume();
}
@Override
protected void onPause() {
datasource.close();
super.onPause();
}
}
我知道我的问题是NtaAdapter.java和CustomAdapter.java的设置不正确。但是,我不知道如何修复它,以便它接受存储在值中的数据列表
由于代码开始变得太长而无法阅读,我没有发布我的其他类。但请注意,如果我不使用自定义listview,一切都正常,因为它还没有工作
任何帮助都将不胜感激。先谢谢你
编辑:另外,我知道NtaAdapter不是真正需要的,但我不知道如何使它使我的CustomAdapter.java从我的值中获取数据,并使用它们来设置我的自定义ListView
编辑2:对于那些想知道值是什么的人,请参考DataLayout.java
.制作CustomAdapter时,您正在尝试传递列表 到接受nAdapter数组的构造函数。所以你的程序不能正常工作 您可以做的是使CustomAdapter类如下所示:
public class CustomAdapter extends ArrayAdapter<Records> {
Context context;
int layoutResourceId;
List<Records> data;
public CustomAdapter(Context context, int layoutResourceId, ArrayList<Records> data) {
super(context, layoutResourceId, data);
// TODO Auto-generated constructor stub
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data=data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
DataHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new DataHolder();
holder.dataName = (TextView)row.findViewById(R.id.dataName);
holder.dataType = (TextView)row.findViewById(R.id.dataType);
row.setTag(holder);
} else {
holder = (DataHolder)row.getTag();
}
Records records = data.get(position);
holder.dataName.setText(records.getName());
holder.dataType.setText(records.getType());
return row;
}
static class DataHolder {
TextView dataName;
TextView dataType;
}
公共类CustomAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
列出数据;
公共CustomAdapter(上下文上下文、int-layoutResourceId、ArrayList数据){
超级(上下文、布局资源ID、数据);
//TODO自动生成的构造函数存根
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个。数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
视图行=转换视图;
数据持有者=null;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新数据持有者();
holder.dataName=(TextView)row.findViewById(R.id.dataName);
holder.dataType=(TextView)row.findViewById(R.id.dataType);
row.setTag(支架);
}否则{
holder=(DataHolder)row.getTag();
}
记录=数据。获取(位置);
holder.dataName.setText(records.getName());
holder.dataType.setText(records.getType());
返回行;
}
静态类数据保持器{
文本视图数据名;
文本视图数据类型;
}
请注意,如果有人要求任何其他信息,请务必让我知道。再次感谢您的帮助。您使用NtaAdapter的目的是什么?@Tapan Thaker NtaAdapter来自一个网站上的教程,该教程将数据存储为字符串。从这个网站上:我想我当时需要一些东西,但我意识到它就像我的“值”,它存储我的所有数据。我知道如果我能找到一种方法从我的“值”中获取数据"我不需要NtaAdapter。如果您需要更多信息,请务必让我知道。我感谢您的时间。我真的很想感谢您帮助我解决问题。在使用您的解决方案并对我的代码进行一些调整后,它工作得很好。非常感谢您。我希望我能投您一票,但是,我的代表并没有更高韩15岁了,非常抱歉。再一次,非常感谢你帮助我!很好,只是分享知识:)