从数据库填充 ListView(带有 3 个 TextView)
Populate ListView (With 3 TextViews) From Database
我已经定义了我的 DatabaseHelper class 并且可以查询数据库。我想将数据库中的 3 列(名称、地点、日期)填充到具有 3 TextViews
的 ListView
,不知何故我无法正确设置 CustomAdapter
。
这是错误:
CustomAdapter adapter = new CustomAdapter(this, myItems_name, myItems_venue, myItems_date);
请查看下面的完整代码:
public class ActivityLayout extends MainActivity implements AdapterView.OnItemClickListener {
List<String> myItems_name;
List<String> myItems_venue;
List<String> myItems_date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
list = (ListView) findViewById(R.id.listView);
CustomAdapter adapter = new CustomAdapter(this, myItems_name, myItems_venue, myItems_date);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
// TODO Auto-generated method stub
TextView tv = (TextView) findViewById(R.id.textNameSingle);
Toast.makeText(this,tv.getText()+"", Toast.LENGTH_SHORT).show();
}
}
////////////////////////////////////////////////////////
class CustomAdapter extends ArrayAdapter<String> {
DatabaseHelper dbHeplper;
private Context context;
private List<String> myItems_name = dbHeplper.getDBData();
private List<String> myItems_venue = dbHeplper.getDBData();
private List<String> myItems_date = dbHeplper.getDBData();
public CustomAdapter(Context context, int resources, List<String> objects) {
super(context, resources, objects);
this.context=context;
this.myItems_name=objects;
this.myItems_venue=objects;
this.myItems_date=objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row=convertView;
if(row==null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.my_layout_single, parent, false);
}
TextView txtArtist = (TextView) row.findViewById(R.id.textNameSingle);
TextView txtVenue = (TextView) row.findViewById(R.id.textVenueSingle);
TextView txtDate = (TextView) row.findViewById(R.id.textDateSingle);
txtArtist.setText(myItems_name[position]);
txtVenue.setText(myItems_venue[position]);
txtDate.setText(myItems_date[position]);
return row;
}
}
更新:#01
@ρяσѕρєя K - 我已经更改了我的 Activity 和自定义适配器如下:(问题仍然存在):
Activity:
public class ActivityLayout extends MainActivity implements AdapterView.OnItemClickListener {
List<String> myItems_name;
List<String> myItems_venue;
List<String> myItems_date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
list = (ListView) findViewById(R.id.listView);
CustomAdapter adapter = new CustomAdapter(this, R.layout.my_layout, myItems_name, myItems_venue, myItems_date);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
适配器:
class CustomAdapter extends ArrayAdapter<String> {
DatabaseHelper dbHeplper;
private Context context;
private List<String> myItems_name = dbHeplper.getDBData();
private List<String> myItems_venue = dbHeplper.getDBData();
private List<String> myItems_date = dbHeplper.getDBData()
public CustomAdapter(Context context, int resources,
List<String> myItems_name,
List<String> myItems_venue,
List<String> myItems_date) {
super(context, resources, myItems_name);
this.context=context;
this.myItems_name=myItems_name;
this.myItems_venue=myItems_venue;
this.myItems_date=myItems_date;
}
您需要初始化这些值:
List<String> myItems_name;
List<String> myItems_venue;
List<String> myItems_date;
这里:
CustomAdapter adapter = new CustomAdapter(this, myItems_name,
myItems_venue, myItems_date);
导致问题的行,因为 CustomAdapter
中没有可用的构造函数,它需要 4 个参数
向 CustomAdapter class 构造函数添加两个参数以获取 myItems_name
和 myItems_venue
:
public CustomAdapter(Context context, int resources,
List<String> myItems_name,
List<String> myItems_venue,
List<String> myItems_date) {
super(context, resources, myItems_name);
//.... your code here
}
还将要用于 ListView 行的布局作为第二个参数传递给 CustomAdapter
class 构造函数:
CustomAdapter adapter = new CustomAdapter(this,R.layout.my_layout_single,
myItems_name, myItems_venue, myItems_date);
@ρяσѕρєя K
感谢您的答案已被选中,错误不再存在。我加了
dbHeplper = new DatabaseHelper(getApplicationContext());在onCreate下。谢谢先生的帮助。
@ρяσѕρєя K(见下方更新代码)
更新代码:
public class ActivityLayout extends MainActivity implements AdapterView.OnItemClickListener {
DatabaseHelper dbHeplper;
ListView list;
List<String> myItems_name;
List<String> myItems_venue;
List<String> myItems_date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
dbHeplper = new DatabaseHelper(getApplicationContext());
myItems_name = dbHeplper.getDBName();
myItems_venue = dbHeplper.getDBVenue();
myItems_date = dbHeplper.getDBDate();
list = (ListView) findViewById(R.id.listView);
CustomAdapter adapter = new CustomAdapter(this, myItems_name, myItems_venue, myItems_date);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
}
我已经定义了我的 DatabaseHelper class 并且可以查询数据库。我想将数据库中的 3 列(名称、地点、日期)填充到具有 3 TextViews
的 ListView
,不知何故我无法正确设置 CustomAdapter
。
这是错误:
CustomAdapter adapter = new CustomAdapter(this, myItems_name, myItems_venue, myItems_date);
请查看下面的完整代码:
public class ActivityLayout extends MainActivity implements AdapterView.OnItemClickListener {
List<String> myItems_name;
List<String> myItems_venue;
List<String> myItems_date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
list = (ListView) findViewById(R.id.listView);
CustomAdapter adapter = new CustomAdapter(this, myItems_name, myItems_venue, myItems_date);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
// TODO Auto-generated method stub
TextView tv = (TextView) findViewById(R.id.textNameSingle);
Toast.makeText(this,tv.getText()+"", Toast.LENGTH_SHORT).show();
}
}
////////////////////////////////////////////////////////
class CustomAdapter extends ArrayAdapter<String> {
DatabaseHelper dbHeplper;
private Context context;
private List<String> myItems_name = dbHeplper.getDBData();
private List<String> myItems_venue = dbHeplper.getDBData();
private List<String> myItems_date = dbHeplper.getDBData();
public CustomAdapter(Context context, int resources, List<String> objects) {
super(context, resources, objects);
this.context=context;
this.myItems_name=objects;
this.myItems_venue=objects;
this.myItems_date=objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row=convertView;
if(row==null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.my_layout_single, parent, false);
}
TextView txtArtist = (TextView) row.findViewById(R.id.textNameSingle);
TextView txtVenue = (TextView) row.findViewById(R.id.textVenueSingle);
TextView txtDate = (TextView) row.findViewById(R.id.textDateSingle);
txtArtist.setText(myItems_name[position]);
txtVenue.setText(myItems_venue[position]);
txtDate.setText(myItems_date[position]);
return row;
}
}
更新:#01
@ρяσѕρєя K - 我已经更改了我的 Activity 和自定义适配器如下:(问题仍然存在):
Activity:
public class ActivityLayout extends MainActivity implements AdapterView.OnItemClickListener {
List<String> myItems_name;
List<String> myItems_venue;
List<String> myItems_date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
list = (ListView) findViewById(R.id.listView);
CustomAdapter adapter = new CustomAdapter(this, R.layout.my_layout, myItems_name, myItems_venue, myItems_date);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
适配器:
class CustomAdapter extends ArrayAdapter<String> {
DatabaseHelper dbHeplper;
private Context context;
private List<String> myItems_name = dbHeplper.getDBData();
private List<String> myItems_venue = dbHeplper.getDBData();
private List<String> myItems_date = dbHeplper.getDBData()
public CustomAdapter(Context context, int resources,
List<String> myItems_name,
List<String> myItems_venue,
List<String> myItems_date) {
super(context, resources, myItems_name);
this.context=context;
this.myItems_name=myItems_name;
this.myItems_venue=myItems_venue;
this.myItems_date=myItems_date;
}
您需要初始化这些值:
List<String> myItems_name;
List<String> myItems_venue;
List<String> myItems_date;
这里:
CustomAdapter adapter = new CustomAdapter(this, myItems_name, myItems_venue, myItems_date);
导致问题的行,因为 CustomAdapter
中没有可用的构造函数,它需要 4 个参数
向 CustomAdapter class 构造函数添加两个参数以获取 myItems_name
和 myItems_venue
:
public CustomAdapter(Context context, int resources,
List<String> myItems_name,
List<String> myItems_venue,
List<String> myItems_date) {
super(context, resources, myItems_name);
//.... your code here
}
还将要用于 ListView 行的布局作为第二个参数传递给 CustomAdapter
class 构造函数:
CustomAdapter adapter = new CustomAdapter(this,R.layout.my_layout_single,
myItems_name, myItems_venue, myItems_date);
@ρяσѕρєя K
感谢您的答案已被选中,错误不再存在。我加了 dbHeplper = new DatabaseHelper(getApplicationContext());在onCreate下。谢谢先生的帮助。
@ρяσѕρєя K(见下方更新代码) 更新代码:
public class ActivityLayout extends MainActivity implements AdapterView.OnItemClickListener {
DatabaseHelper dbHeplper;
ListView list;
List<String> myItems_name;
List<String> myItems_venue;
List<String> myItems_date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
dbHeplper = new DatabaseHelper(getApplicationContext());
myItems_name = dbHeplper.getDBName();
myItems_venue = dbHeplper.getDBVenue();
myItems_date = dbHeplper.getDBDate();
list = (ListView) findViewById(R.id.listView);
CustomAdapter adapter = new CustomAdapter(this, myItems_name, myItems_venue, myItems_date);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
}