将数据显示到列表视图中

时间:2013-01-11 19:35:26

标签: android sqlite listview

以下代码显示listview上sqlite数据库的信息。 1,它显示日期,列表视图允许我点击,当我点击日期时,它会向我显示在该日期在列表视图上完成的信息。我的问题是当我在这个日期12.01.2013保存数据并且我稍后重复相同的日期然后它显示相同的日期两次,我希望它只是显示一个日期,当我点击它向我显示我的数据保存在早上,以及我在同一天晚些时候保存的数据,而不是两个相似的日期。

这里是代码

public class Pro extends Activity implements OnItemClickListener {

    private ListView uNamesListView;

        private ListAdapter customerListAdapter;
        private ArrayList<PojoClass> pojoArrayList;

    final Context context = this;
    private Button button;
    private TextView result;
    DBAdapter db = new DBAdapter(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        uNamesListView = (ListView) findViewById(R.id.listView1);
        uNamesListView.setOnItemClickListener(this);

        pojoArrayList = new ArrayList<PojoClass>();
        customerListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
        uNamesListView.setAdapter(customerListAdapter);                 


    }

           public List<String> populateList() {


                List<String> uGraduateNamesList = new ArrayList<String>();
                DatabaseHelper openHelperClass = new DatabaseHelper(this);
                SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase();
                Cursor cursor = sqliteDatabase.query(DBAdapter.SCAN_TABLE, null, null, null, null, null, null);
                startManagingCursor(cursor);
                while (cursor.moveToNext()) {

                    String cDate = cursor.getString(cursor.getColumnIndex(DBAdapter.COLUMN_Date ));
                    String cMeterNumber = cursor.getString(cursor.getColumnIndex(DBAdapter.COLUMN_MeterNumber ));
                    String cVname = cursor.getString(cursor.getColumnIndex(DBAdapter.COLUMN_Vname ));
                    String cPname = cursor.getString(cursor.getColumnIndex(DBAdapter.COLUMN_PName ));

                    PojoClass ss = new PojoClass();
                    ss.SetName(cDate);
                    ss.SetSurname(cMeterNumber);
                    ss.SetID(cVname);
                    ss.SetHaddress(cPname);
                pojoArrayList.add(ss);

                    uGraduateNamesList.add(cDate);
                }
                sqliteDatabase.close();

                return uGraduateNamesList;

    }

    @Override
    public void onItemClick(AdapterView<?> aa, View view, int ss, long bb) {
        // TODO Auto-generated method stub
        Intent updateCustomerIntent = new Intent(Pro.this, ViewByVendor.class);

        updateCustomerIntent.putExtra("product", product);
        startActivity(updateCustomerIntent);

        Toast.makeText(getApplicationContext(), "Clicked on :" + ss, Toast.LENGTH_SHORT).show();
        PojoClass clickedObject =  pojoArrayList.get(ss);

        Bundle dataBundle = new Bundle();

        dataBundle.putString("clickedDate", clickedObject.getDates());
        dataBundle.putString("clickedMeterNumber", clickedObject.getMeterNumber());
        dataBundle.putString("clickedVname", clickedObject.getVname());
        dataBundle.putString("clickedPname", clickedObject.getPname());
        updateCustomerIntent.putExtras(dataBundle);
        startActivity(updateCustomerIntent);


    }


}

我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在阅读列表视图的日期时,您只需要唯一日期。 在SQL中,可以使用DISTINCTGROUP BY

来完成此操作
SELECT DISTINCT Date FROM ScanTable
SELECT Date FROM ScanTable GROUP BY Date

Android代码如下所示:

cursor = db.query(true,                       // <-- distinct
                  DBAdapter.SCAN_TABLE,
                  new String[] { DBAdapter.COLUMN_Date },
                  null, null, null, null, null, null);
cursor = db.query(DBAdapter.SCAN_TABLE,
                  new String[] { DBAdapter.COLUMN_Date },
                  null, null,
                  DBAdapter.COLUMN_Date,      // <-- groupBy
                  null, null);

要显示日期的数据,您应该只将日期传递给该活动,并读取与日期匹配的所有记录:

SELECT * FROM ScanTable WHERE Date = ?
String selectedDate = ...;
cursor = db.query(DBAdapter.SCAN_TABLE, null,
                  DBAdapter.COLUMN_Date + " = ?", selectedDate,
                  null, null, null);