2015-02-23 73 views
0

我製作了一個帶有兩個表的android SQLite數據庫,每個表都在不同的活動中執行。我試圖把它們放在同一個listview中。在同一個listview適配器中的Android 2 sqlite數據庫表

這是我的活動的列表視圖。

public class MainActivity extends ActionBarActivity { 

    ListView lv; 
    SQLController dbcon; 
    TextView incomeID_tv, incomePayer_tv, incomeAmount_tv; 
    TextView incomeDate_tv, incomeCategory_tv, incomePayments_tv; 
    TextView expenseID_tv, expensePayee_tv, expenseAmount_tv; 
    TextView expenseDate_tv, expenseCategory_tv, expensePayments_tv; 

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

     dbcon = new SQLController(this); 
     dbcon.open(); 
     lv = (ListView) findViewById(R.id.incomeList_id); 

     Cursor cursor = dbcon.readIncomeData(); 
     String[] from = new String[] { DBHelper.INCOME_ID, DBHelper.INCOME_AMOUNT, DBHelper.INCOME_PAYER, 
       DBHelper.INCOME_DATE, DBHelper.INCOME_CATEGORY, DBHelper.INCOME_PAYMENTS}; 
     int[] to = new int[] { R.id.income_id, R.id.income_amount, R.id.income_payer, R.id.income_date, 
       R.id.income_category, R.id.income_payments}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(
       MainActivity.this, R.layout.income_entry, cursor, from, to); 

     adapter.notifyDataSetChanged(); 
     lv.setAdapter(adapter); 

     Cursor ecursor = dbcon.readExpenseData(); 
     String[] efrom = new String[] { DBHelper.EXPENSE_ID, DBHelper.EXPENSE_AMOUNT, DBHelper.EXPENSE_PAYEE, 
       DBHelper.EXPENSE_DATE, DBHelper.EXPENSE_CATEGORY, DBHelper.EXPENSE_PAYMENTS}; 
     int[] eto = new int[] { R.id.expense_id, R.id.expense_amount, R.id.expense_payee, R.id.expense_date, 
       R.id.expense_category, R.id.expense_payments}; 

     SimpleCursorAdapter eadapter = new SimpleCursorAdapter(
       MainActivity.this, R.layout.expense_entry, ecursor, efrom, eto); 

     eadapter.notifyDataSetChanged(); 
     lv.setAdapter(eadapter); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       incomeID_tv = (TextView) view.findViewById(R.id.income_id); 
       incomeAmount_tv = (TextView) view.findViewById(R.id.income_amount); 
       incomePayer_tv = (TextView) view.findViewById(R.id.income_payer); 
       incomeDate_tv = (TextView) view.findViewById(R.id.income_date); 
       incomeCategory_tv = (TextView) view.findViewById(R.id.income_category); 
       incomePayments_tv = (TextView) view.findViewById(R.id.income_payments); 

       String incomeID = incomeID_tv.getText().toString(); 
       String incomeAmount = incomeAmount_tv.getText().toString(); 
       String incomePayer = incomePayer_tv.getText().toString(); 
       String incomeDate = incomeDate_tv.getText().toString(); 
       String incomeCategory = incomeCategory_tv.getText().toString(); 
       String incomePayments = incomePayments_tv.getText().toString(); 

       Intent modify_intent = new Intent(getApplicationContext(), 
         IncomeEdit.class); 
       modify_intent.putExtra("incomeID", incomeID); 
       modify_intent.putExtra("newIncomeAmount", incomeAmount); 
       modify_intent.putExtra("newIncomePayer", incomePayer); 
       modify_intent.putExtra("newIncomeDate", incomeDate); 
       modify_intent.putExtra("newIncomeCategory", incomeCategory); 
       modify_intent.putExtra("newIncomePayments", incomePayments); 
       startActivity(modify_intent); 
      } 
     }); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       expenseID_tv = (TextView) view.findViewById(R.id.expense_id); 
       expenseAmount_tv = (TextView) view.findViewById(R.id.expense_amount); 
       expensePayee_tv = (TextView) view.findViewById(R.id.expense_payee); 
       expenseDate_tv = (TextView) view.findViewById(R.id.expense_date); 
       expenseCategory_tv = (TextView) view.findViewById(R.id.expense_category); 
       expensePayments_tv = (TextView) view.findViewById(R.id.expense_payments); 

       String expenseID = expenseID_tv.getText().toString(); 
       String expenseAmount = expenseAmount_tv.getText().toString(); 
       String expensePayer = expensePayee_tv.getText().toString(); 
       String expenseDate = expenseDate_tv.getText().toString(); 
       String expenseCategory = expenseCategory_tv.getText().toString(); 
       String expensePayments = expensePayments_tv.getText().toString(); 

       Intent modify_intent = new Intent(getApplicationContext(), 
         ExpenseEdit.class); 
       modify_intent.putExtra("expenseID", expenseID); 
       modify_intent.putExtra("newExpenseAmount", expenseAmount); 
       modify_intent.putExtra("newExpensePayee", expensePayer); 
       modify_intent.putExtra("newExpenseDate", expenseDate); 
       modify_intent.putExtra("newExpenseCategory", expenseCategory); 
       modify_intent.putExtra("newExpensePayments", expensePayments); 
       startActivity(modify_intent); 
      } 
     }); 
    } 

問題是它只顯示了費用。我認爲問題來自適配器,但我不知道如何將它們都包含在同一個適配器中。 :)

+0

我認爲在'readIncomeData'方法中,你應該加入兩個表,並調整代碼以顯示交叉找到的數據 – eduyayo 2015-02-23 15:19:02

+0

順便說一下,帖子的標題,你有兩個數據庫和實際描述談到兩表。我去參加。 – eduyayo 2015-02-23 15:19:52

+0

Thx暗示.... P.S.我更新了標題:) – 2015-02-23 15:23:33

回答

2

set並不意味着add。如果你setAdapter這意味着舊的(如果有的話)將被替換。 OnItemClickListener也是如此。

如果遊標具有相同的列名稱,則可以將它們組合,但它們不同,並且適配器無法區分2個遊標(費用和收入)的數據。

此外,每個點擊偵聽器都具有類型特定的操作,比如放置特定的意圖附加項。這只是意味着你需要多個適配器,因此需要多個ListView's。

您需要使表格和應用程序設計更通用或繼續使用2 ListView s。

+0

thx爲解釋:) – 2015-02-23 15:23:01

相關問題