2012-05-30 39 views
0

我正在開發一個android應用程序,其中第一頁是首頁。在點擊主頁上的任何項目時,用戶可以查看該項目中的詳細信息。詳細信息來自sqlite數據庫,可以被用戶在應用程序中接受或拒絕。在用戶接受或拒絕時,細節將從細節列表中刪除。但是,當從詳情頁面點擊返回按鈕時,當用戶再次到達主頁時,出現這樣的問題,即當用戶再次點擊同一項目時,它顯示所有細節而不保存狀態。在android應用程序中保存已更改數據庫的狀態

E.g.如果我的item1中有10個細節..我查看細節頁面中的所有10個細節..然後接受2..so總保持8 ..但是當我點擊回到主頁並再次點擊item1時,它顯示再次全部10 ...並且不記錄當2被接受時發生的變化。

這怎麼解決?


這是我們正在努力的代碼:

package com.sql.nigel; 


import java.util.ArrayList; 

    public class listActivity extends ListActivity implements 
    android.view.View.OnClickListener,OnItemClickListener{ 
    private ArrayList<listActivity2> m_orders = null; 
    private OrderAdapter m_adapter; 
    private Runnable viewOrders; 
    private SQLiteDatabase database; 
    private MySQLiteHelper dbHelper=new MySQLiteHelper(this); 
    private String[] leave_Col = {"Requester","LeaveType","No_of_Days","FromDate","ToDate"}; 
    private String[] Cart_Col = {"CartNo","Date","Description","TotalValue","TotalTax","BudgetValue","UniqueNo"}; 
    private String[] Time_Col = {"Name","Date","Project","Client","Tasks","FromDate","ToDate"}; 
    private String[] Travel_Col = {"Requester","Purpose","Location","Cost","Date","Description","FromDate","ToDate","Hotel","Taxi","AdditionalExp"}; 
    private String[] Invoice_Col = {"InvoiceNo","VendorName","Date","InvoiceValue","Date","VendorNo","PostingDate","FiscalYear","Pln_Group"}; 
    private String[] Purchase_Col = {"PONo","Date","Vendor","OrderValue","PurchasingOrg","ApprovedVendor","Requester","Notes","RelatedInfo","QualityScore"}; 
    String table_name; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listactivity); 

     database = dbHelper.getWritableDatabase(); 
     table_name=this.getIntent().getExtras().getString("activity");   

     Button backButton = (Button)findViewById(R.id.back); 
     backButton.setOnClickListener(this); 

     Button selectButton = (Button)findViewById(R.id.select); 
     selectButton.setOnClickListener(this); 

     /* ImageView rightarrow = (ImageView)findViewById(R.id.rightarrow); 
     rightarrow.setOnClickListener(this);*/ 

     m_orders = new ArrayList<listActivity2>(); 
     this.m_adapter = new OrderAdapter(this, R.layout.listactivity2, m_orders); 
     setListAdapter(this.m_adapter); 


     ListView listView=(ListView)findViewById(android.R.id.list); 
     listView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
       if(table_name.compareTo("LeaveRequest")==0){ 
        Intent intent = new Intent(listActivity.this, leavedetails.class); 
        Bundle b = new Bundle(); //Create bundle 
        b.putInt("key",position); //Your id 
        intent.putExtras(b); //Put your id to your next Intent 
        startActivity(intent); //Call intent      
       }else if(table_name.compareTo("Time")==0){ 
        Intent intent = new Intent(listActivity.this, timedetails.class); 
        Bundle b = new Bundle(); //Create bundle 
        b.putInt("key",position); //Your id 
        intent.putExtras(b); //Put your id to your next Intent 
        startActivity(intent); //Call intent 
       }else if(table_name.compareTo("ShoppingCart")==0){ 
        Intent intent = new Intent(listActivity.this, cartdetails.class); 
        Bundle b = new Bundle(); //Create bundle 
        b.putInt("key",position); //Your id 
        intent.putExtras(b); //Put your id to your next Intent 
        startActivity(intent); //Call intent 
       }else if(table_name.compareTo("Invoice")==0){ 
        Intent intent = new Intent(listActivity.this, invoicedetails.class); 
        Bundle b = new Bundle(); //Create bundle 
        b.putInt("key",position); //Your id 
        intent.putExtras(b); //Put your id to your next Intent 
        startActivity(intent); //Call intent 
       }else if(table_name.compareTo("PurchaseOrder")==0){ 
        Intent intent = new Intent(listActivity.this, purchasedetails.class); 
        Bundle b = new Bundle(); //Create bundle 
        b.putInt("key",position); //Your id 
        intent.putExtras(b); //Put your id to your next Intent 
        startActivity(intent); //Call intent 
       }else if(table_name.compareTo("Travel")==0){ 
        Intent intent = new Intent(listActivity.this, traveldetails.class); 
        Bundle b = new Bundle(); //Create bundle 
        b.putInt("key",position); //Your id 
        intent.putExtras(b); //Put your id to your next Intent 
        startActivity(intent); //Call intent 

       } 



      } 
      }); 



     viewOrders = new Runnable(){ 
      public void run() { 
       getOrders(); 
      } 
     }; 

     Thread thread = new Thread(null, viewOrders, "MagentoBackground"); 
     thread.start(); 

    } 
    private Runnable returnRes = new Runnable() { 

     public void run() { 
      if(m_orders != null && m_orders.size() > 0){ 
       m_adapter.notifyDataSetChanged(); 
       for(int i=0;i<m_orders.size();i++) 
       m_adapter.add(m_orders.get(i)); 
      } 

      m_adapter.notifyDataSetChanged(); 
     } 
    }; 
    private void getOrders(){ 
      try{ 
       m_orders = new ArrayList<listActivity2>(); 

       if(table_name.compareTo("LeaveRequest")==0){display_Leave();        
       }else if(table_name.compareTo("Time")==0){display_Time(); 
       }else if(table_name.compareTo("ShoppingCart")==0){display_Cart(); 
       }else if(table_name.compareTo("Invoice")==0){display_Invoice(); 
       }else if(table_name.compareTo("PurchaseOrder")==0){display_Purchase(); 
       }else if(table_name.compareTo("Travel")==0){display_Travel(); 
       } 

       Log.i("ARRAY", ""+ m_orders.size()); 
      } catch (Exception e) { 
       Log.e("BACKGROUND_PROC", e.getMessage()); 
      } 
      runOnUiThread(returnRes); 
      database.close(); 
     } 
    public void display_Leave(){ 
      TextView heading=(TextView)findViewById(R.id.heading); 
      heading.setText("Leave Request"); 
      Cursor c_L = database.query("LeaveRequest",leave_Col, null, null, null, null, null); 
      c_L.moveToFirst();   
      while (!c_L.isAfterLast()) {    
      listActivity2 o1 = new listActivity2();    
      o1.setOrdertext1(""+c_L.getString(0)); 
      o1.setOrdertext2(""+c_L.getString(2)+" days"); 
      o1.setOrdertext3(""+c_L.getString(1)+" "); 
      o1.setOrdertext4(""+c_L.getString(3)+" to "+c_L.getString(4));       
      m_orders.add(o1); 
      c_L.moveToNext();    
      } c_L.close();    
     } 
    public void display_Time(){ 
     TextView heading=(TextView)findViewById(R.id.heading); 
     heading.setText("Time Booking"); 
     Cursor c_L = database.query("Time",Time_Col, null, null, null, null, null); 
      c_L.moveToFirst();   
      while (!c_L.isAfterLast()) {    
      listActivity2 o1 = new listActivity2();    
     o1.setOrdertext1(""+c_L.getString(0)); 
     o1.setOrdertext2(""+c_L.getString(3)); 
     o1.setOrdertext3(""+c_L.getString(2)+" "); 
     o1.setOrdertext4(""+c_L.getString(1));       
     m_orders.add(o1); 
     c_L.moveToNext();    
      } c_L.close();    
    } 
    public void display_Cart(){ 
      TextView heading=(TextView)findViewById(R.id.heading); 
      heading.setText("Shopping Cart"); 
      Cursor c_L = database.query("ShoppingCart",Cart_Col, null, null, null, null, null); 
      c_L.moveToFirst();   
      while (!c_L.isAfterLast()) {    
      listActivity2 o1 = new listActivity2();    
      o1.setOrdertext1(""+c_L.getString(0)); 
      o1.setOrdertext2(""); 
      o1.setOrdertext3(""+c_L.getString(2)+" "); 
      o1.setOrdertext4(""+c_L.getString(1));       
      m_orders.add(o1); 
      c_L.moveToNext();    
      } c_L.close();    
     } 
    public void display_Invoice(){ 
      TextView heading=(TextView)findViewById(R.id.heading); 
      heading.setText("Invoice Approval"); 
      Cursor c_L = database.query("Invoice",Invoice_Col, null, null, null, null, null); 
      c_L.moveToFirst();   
      while (!c_L.isAfterLast()) {    
      listActivity2 o1 = new listActivity2();    
      o1.setOrdertext1(""+c_L.getString(1)); 
      o1.setOrdertext2(""); 
      o1.setOrdertext3(""+c_L.getString(0)+" "); 
      o1.setOrdertext4(""+c_L.getString(2));       
      m_orders.add(o1); 
      c_L.moveToNext();    
      } c_L.close();    
     } 
    public void display_Purchase(){ 
     TextView heading=(TextView)findViewById(R.id.heading); 
     heading.setText("Purchase Order"); 
     Cursor c_L = database.query("PurchaseOrder",Purchase_Col, null, null, null, null, null); 
      c_L.moveToFirst();   
      while (!c_L.isAfterLast()) {    
      listActivity2 o1 = new listActivity2();    
     o1.setOrdertext1(""+c_L.getString(0)); 
     o1.setOrdertext2(""+c_L.getString(3)); 
     o1.setOrdertext3(""+c_L.getString(2)+" "); 
     o1.setOrdertext4(""+c_L.getString(1));       
     m_orders.add(o1); 
     c_L.moveToNext();    
      } c_L.close();    
    } 
    public void display_Travel(){ 
      TextView heading=(TextView)findViewById(R.id.heading); 
      heading.setText("Travel Approval"); 
      Cursor c_L = database.query("Travel",Travel_Col, null, null, null, null, null); 
      c_L.moveToFirst();   
      while (!c_L.isAfterLast()) {    
      listActivity2 o1 = new listActivity2();    
      o1.setOrdertext1(""+c_L.getString(1)); 
      o1.setOrdertext2(""+c_L.getString(3)); 
      o1.setOrdertext3(""+c_L.getString(2)+" "); 
      o1.setOrdertext4(""+c_L.getString(4));       
      m_orders.add(o1); 
      c_L.moveToNext();    
      } c_L.close();    
     } 
    private class OrderAdapter extends ArrayAdapter<listActivity2> { 

     private ArrayList<listActivity2> items; 

     public OrderAdapter(Context context, int textViewResourceId, ArrayList<listActivity2> items) { 
       super(context, textViewResourceId, items); 
       this.items = items; 
     } 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
       View v = convertView; 
       if (v == null) { 
        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        v = vi.inflate(R.layout.listactivity2, null); 
       } 
       listActivity2 o = items.get(position); 
       if (o != null) { 
         TextView t1 = (TextView) v.findViewById(R.id.textList1); 
         TextView t2 = (TextView) v.findViewById(R.id.textList2); 
         TextView t3 = (TextView) v.findViewById(R.id.textList3); 
         TextView t4 = (TextView) v.findViewById(R.id.textList4); 
         if (t1 != null) { 
           t1.setText(o.getOrdertext1());   
         } 
         if(t2 != null){ 
           t2.setText(o.getOrdertext2()); 
         } 
         if(t3 != null){ 
           t3.setText(o.getOrdertext3()); 
         } 
         if(t4 != null){ 
           t4.setText(o.getOrdertext4()); 
         } 
       } 
       return v; 
     } 
} 

    public void onClick(View v) { 

     switch(v.getId()) 
     { 
     case R.id.back: 
      Intent backIntent = new Intent(listActivity.this, SqlTwoActivity.class); 

      startActivity(backIntent);     
      break; 

     case R.id.select: 
      Intent selectIntent = new Intent(listActivity.this, checkappear.class); 
      selectIntent.putExtra("checkappear", table_name); 
      startActivity(selectIntent);      
      break; 
     /* 
     case R.id.rightarrow: 
      Intent rightarrow = new Intent(listActivity.this, listActivity.class); 
      startActivity(rightarrow);     
      break;*/   
     } 
    } 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 

    } 
} 
+1

很難看到沒有任何代碼的問題,你可能會發布一些? – Peter

+0

我明白,但問題是有很多xml和java文件相同...所以它變得很難張貼在這裏,因爲他們巨大太..:/我可以詳細說明這個問題,任何幫助將不勝感激 – Unknown

+1

post您可以使用SQLite調用。當您點擊兩項中的接受時會發生什麼?你可以顯示你實際上做SQlite調用的日誌嗎?如果是這種情況,也許你在按下按鈕後重新初始化某些東西。也許你會使用具有全部10個細節的舊對象實例,而不是新的對象實例......可能會有許多事情沒有看到您的代碼。 – hovanessyan

回答

0

很難找到你的代碼數據庫調用。一些一般指導原則:

首先,您需要將所有對數據庫的調用封裝在不同的線程中。 完成後,請始終關閉遊標和數據庫連接。 最好是使用AsyncTask。查看一些使用SQLite和AsyncTask的教程 - 它會自動爲你處理單獨的線程。

第二 - 閱讀關於Activity Stack,這樣@Peter告訴你的是合理的。

相關問題