0

最初のページがホームページであるAndroidアプリに取り組んでいます。ホームページ上の任意のアイテムをクリックすると、ユーザーはそのアイテムの詳細を表示できます。詳細は sqlite データベースから取得され、ユーザーはアプリで承認または拒否できます。ユーザーが承認または拒否すると、詳細は詳細リストから削除されます。しかし、詳細ページから戻るボタンをクリックして、ユーザーが再びホームページに到達すると、ユーザーが同じ項目を再度クリックすると、状態が保存されずにすべての詳細が表示されるという問題が発生します。

たとえば、アイテム 1 に 10 個の詳細がある場合、詳細ページに 10 個の詳細をすべて表示し、2 を受け入れます。合計は 8 のままです。再び 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

    }
}
4

1 に答える 1

0

コード内でデータベース呼び出しを見つけるのが難しい。一般的なガイドライン:

最初に、データベースへのすべての呼び出しを個別のスレッドにカプセル化する必要があります。完了したら、常にカーソルと DB 接続を閉じてください。AsyncTaskを使用するのが最善です。AsyncTask で SQLite を使用するためのいくつかのチュートリアルを確認してください。別のスレッドが自動的に処理されます。

2番目 - @Peterがあなたに言うことを理解できるように、 Activity Stackについて読んでください。

于 2012-05-30T10:36:36.637 に答える