从数据库填充 ListView(带有 3 个 TextView)

Populate ListView (With 3 TextViews) From Database

我已经定义了我的 DatabaseHelper class 并且可以查询数据库。我想将数据库中的 3 列(名称、地点、日期)填充到具有 3 TextViewsListView,不知何故我无法正确设置 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_namemyItems_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);
    }