获取位置和显示信息而不使用if语句?

时间:2015-05-27 16:58:28

标签: java android sqlite listview if-statement

我正在尝试使用预先填充数据的SQLite数据库为Android制作应用程序。该应用程序就像一个带有书籍的图书馆,当用户点击列表视图时,下一个活动会显示图书的内容。我可以访问数据并显示它没有问题,但代码变得非常大而且看起来不太好。每本书在databasehelper类中都有一个方法,在if语句中有一个相应的方法,它获取listview中的位置并在另一个活动上显示相应的信息。你可以想象这看起来并不好看,我想知道是否有另一种方法可以做到这一点,也许有一种方法可以确定用户点击的位置,另一种用于从数据库中获取数据,而不是20(10)我现在拥有的书籍。感谢所有帮助!

用户点击列表视图的活动中的代码。

 public class MainActivity2Activity extends ActionBarActivity {


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int        position, long id) {


            if (position == 0){
                Cursor cursor = dbHelper.readBook();
                StringBuilder sb = new StringBuilder();
                while (cursor.moveToNext()) {
                    sb.append(cursor.getString(4) + "\n");

                  Intent i = new Intent(MainActivity2Activity.this,
                   Books.class);
                    i.putExtra(null, sb.toString());
                    startActivity(i);

                }

            }

           else if (position == 1){
                Cursor cursor = dbHelper.readBook2();
                StringBuilder sb = new StringBuilder();
                while (cursor.moveToNext()) {
                    sb.append(cursor.getString(4) + "\n");

                  Intent i = new Intent(MainActivity2Activity.this, 
                     Books.class);
                    i.putExtra(null, sb.toString());
                    startActivity(i);

                }

            }

依此类推10本书

 public class DatabaseHelper extends SQLiteOpenHelper {

public static String id = "1";
public static String id2 = "2";
public static String id3 = "3";
//and so on and so forth to ten id's...


 //code to fetch info from the database.
 public Cursor readBook(){
      SQLiteDatabase db = this.getWritableDatabase();
       String sql = "select * from " + TABLE_NAME+ " 
  where " + COL_ID + " = '" + id + "';";

   return db.rawQuery(sql,null);
}

每本书都会继续。(我知道sql语句不是正确的方法,光标应该关闭,但这是一个测试应用程序,代码在最终版本中会略有不同)

用于在第三个活动中显示数据的代码。

public class Books extends ActionBarActivity {

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_boken);

    openBookLayout = (TextView)findViewById(R.id.openBookLayout);
    String book = getIntent().getExtras().get(null).toString();
    openBookLayout.setText(book); 

1 个答案:

答案 0 :(得分:1)

为什么不把位置发送到函数?

public Cursor readBook(String book) {

      SQLiteDatabase db = this.getWritableDatabase();
      String sql = "select * from " + TABLE_NAME+ " 
                    where " + COL_ID + " = '" + book + "';";

      return db.rawQuery(sql,null);
}

Cursor cursor = dbHelper.readBook(Integer.toString(position));
StringBuilder sb = new StringBuilder();

while (cursor.moveToNext()) {

    sb.append(cursor.getString(4));
    sb.append("\n");

    Intent i = new Intent(MainActivity2Activity.this,
                               Books.class);
         i.putExtra(null, sb.toString());
         startActivity(i);    
 }