2016-11-29 73 views
-2

實際上,當我觸摸列表視圖時,我會看到一個列表視圖,當我選中複選框並按下確定時,彈出窗口將顯示覆選框,然後關閉對話框,以及何時我再次觸摸列表視圖,然後選中的行位置將更改背景顏色並存儲到數據庫中。實際上,當我再次選擇不同的項目位置並檢查並按下OK並再次觸摸列表視圖而不是輸入數據庫中的檢查位置時,先前檢查的位置也與當前檢查的位置一起進入數據庫。所以我需要在列表視圖看到檢查的位置之前獲得先前的位置和清除位置。所以它只能進入當前位置。如何在列表視圖中獲取上一個選中的位置

我的活動

listView1.setOnTouchListener(new AdapterView.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_UP) { 
      newListitems2.clear(); 
      newListitems2.addAll(itemsList1); 

      dialog = new Dialog(PendingOrdersActitvity.this); 
      dialog.setContentView(R.layout.itembumping); 

      dialog.show(); 

      //listView1.setTag(position); 
      list1 = (ListView) dialog.findViewById(R.id.list1); 

      ItemBumpingAdapter adapter2 = new ItemBumpingAdapter(PendingOrdersActitvity.this, newListitems2); 
      list1.setAdapter(adapter2); 

      Button okButton = (Button) dialog.findViewById(R.id.ok1); 
      okButton.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        dialog.dismiss(); 
       } 
      }); 
      Button cancelButton = (Button) dialog.findViewById(R.id.Cancel1); 
      cancelButton.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        dialog.dismiss(); 
       } 
      }); 
     } 
     return true; 
    } 
}); 

Implimented代碼:

listView1.setOnTouchListener(new AdapterView.OnTouchListener() { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
         if(event.getAction() == MotionEvent.ACTION_UP){ 



        newListitems2.clear(); 
        newListitems2.addAll(itemsList1); 

        dialog = new Dialog(PendingOrdersActitvity.this); 
         dialog.setContentView(R.layout.itembumping); 

         dialog.show(); 





         list1=(ListView)dialog.findViewById(R.id.list1); 


         ItemBumpingAdapter adapter2 = new ItemBumpingAdapter(PendingOrdersActitvity.this,newListitems2); 
         list1.setAdapter(adapter2); 






         Button okButton = (Button)dialog.findViewById(R.id.ok1); 
         okButton.setOnClickListener(new OnClickListener() { 

          @Override 
          public void onClick(View v) { 

           dialog.dismiss(); 


           Connection con1 = DbHandler.dbConnection(); 
           try{ 
           PreparedStatement stmt1 = con1 
             .prepareStatement("Select Line_No, ItemName,DeleteFlag from PendingOrders_Dtl where Inv_No=? "); 

           stmt1.setString(1,invNo); 
           ResultSet rsSetup1 = stmt1.executeQuery(); 


           if (rsSetup1.next()) { 
            ItemsBean bean1 = new ItemsBean(); 


             bean1.setLinenum(rsSetup1.getInt("Line_No")); 
             bean1.setProdnum(rsSetup1.getInt("ItemName")); 

             bean1.setDeleteFlag(rsSetup1.getInt("DeleteFlag")); 
            disablelist.add(bean1); 



           } 

           CustomAdapter adapter1 = new CustomAdapter(PendingOrdersActitvity.this, itemsList1); 
            for(int i=0;i<itemsList1.size();i++) 
            { 
             for(int j=0;j<disablelist.size();j++) 
             { 
             if(itemsList1.get(i).getProdnum()==disablelist.get(j).getProdnum()) 
             { 

              itemsList1.get(i).setSelection(true); 



             } 




          } 
          } 
           } 
           catch(Exception e) 
           { 
            e.printStackTrace(); 
           } 
          } 

       }); 
+0

嘗試添加「list1.clearChoices();」在創建adapter2之前。希望有所幫助! –

+0

我會盡力謝謝 – ravi

+0

對不起!誤解了你的問題。你檢查CheckBox,而不是ListItem。因此,請嘗試添加:「for(int i = 0; i

回答

0

嘗試這樣的事情

int previousPosition; 

    public int getPreviousPosition() { 
return previousPosition; 
} 


public void setPreviousPosition(int previousPosition) { 
this.previousPosition = previousPosition; 
} 

,並在您的列表視圖的項目中選擇收聽

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

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

     int prePos= getPreviousPosition(); 
     // do what ever you want to do with this prePos  



    View viewchild= parent.getChildAt(getPreviousPosition()); 
      CheckBox prevCheckBox=(CheckBox)viewchild.findViewById(R.id.Checkbox_sort_list); 
      prevCheckBox.setChecked(false); 

     //at ending of list view write this 
      setPreviousPosition(position); 

     } 
    }); 
+0

但我怎麼能位置明確之前,停止進入數據庫 – ravi

+0

我不完全理解你的問題,如果你想以前checbox得到制止,我有編輯代碼來做到這一點 – Redman

0

我想你已經在itemList1中保留了選中的位置,所以在將它複製到newListitems2之後,你需要清除newListitems2中的選中位置。 試試這個:

listView1.setOnTouchListener(new AdapterView.OnTouchListener() { 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_UP) { 
     newListitems2.clear(); 
     newListitems2.addAll(itemsList1); 

     dialog = new Dialog(PendingOrdersActitvity.this); 
     dialog.setContentView(R.layout.itembumping); 

     dialog.show(); 

     //listView1.setTag(position); 
     list1 = (ListView) dialog.findViewById(R.id.list1); 

     // Uncheck all items of newListitems2 
     for(int i=0; i<newListitems2.size(); i++){ 
      ItemsBean tmpItem = newListitems2.get(i); 
      tmpItem.setChecked(false); 
      newListitems2.remove(i); 
      newListitems2.add(i, tmpItem); 
     } 

     ItemBumpingAdapter adapter2 = new ItemBumpingAdapter(PendingOrdersActitvity.this, newListitems2); 
     list1.setAdapter(adapter2); 

     Button okButton = (Button) dialog.findViewById(R.id.ok1); 
     okButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dialog.dismiss(); 
      } 
     }); 
     Button cancelButton = (Button) dialog.findViewById(R.id.Cancel1); 
     cancelButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       dialog.dismiss(); 
      } 
     }); 
    } 
    return true; 
} 
}); 

對於其他問題:

方法1:

如果在彈出的對話框的列表是相同的主目錄,則可以嘗試:當被駁回對話,從彈出的對話框中獲取列表並將其複製到主列表中。在Adapter類

  1. Add方法來從適配器2獲取列表:

    public ArrayList<ItemsBean> getItemList(){ 
        return newListitems; 
    } 
    
  2. 當okbutton點擊,在寫的主列表,並關閉該對話框:

    itemsList1 = adapter2.getItemList(); 
    adapter1 = new ItemBumpingAdapter(PendingOrdersActitvity.this, itemList1); 
    adapter1.notifyDataSetChanged(); 
    dialog.dismiss(); 
    

方法2:

  1. Add方法適配器1,檢查項目:

    public void checkItemsAccordingDatabase(){ 
        for(int i=0; i<newListItems; i++){ 
         ItemsBean tmpItem = newListItems.get(i); 
         // query tmpItem in database. 
         // if tmpItem exits, newListItems.get(i).setChecked(true). 
        } 
        notifyDataSetChanged(); 
    } 
    
  2. 當okbutton點擊,更新主列表,並關閉該對話框:

    adapter1.checkItemsAccordingDatabase(); 
    dialog.dismiss(); 
    
+0

ListItem tmpItem = newListitems2.get(i); – ravi

+0

它顯示的錯誤在「ListItem」 – ravi

+0

什麼是您的項目在列表中?在你的郵政編碼中,我沒有找到它,所以我只是讓它ListItem。 –

0

試試這個:

// Move this after setSelection. 
// CustomAdapter adapter1 = new CustomAdapter(PendingOrdersActitvity.this, itemsList1); 

for(int i=0;i<itemsList1.size();i++){ 
    for(int j=0;j<disablelist.size();j++){ 
     if(itemsList1.get(i).getProdnum()==disablelist.get(j).getProdnum()){ 
      itemsList1.get(i).setSelection(true); 
      break; 
     } 
    } 
}  
CustomAdapter adapter1 = new CustomAdapter(PendingOrdersActitvity.this, itemsList1); 
listView1.setAdapter(adapter1); 

並修改CustomAdapter的getView()類似於您的ItemBumpingAdapter:

if(newListItems.isSelected()){ 
    convertView.setBackgroundColor(...); 
else{ 
    convertView.setBackgroundColor(...); 
} 
retrun convertView; 
+0

tnq這麼多的時間來響應我的實施代碼通過獲得我編輯的問題的位置它 – ravi

+0

那裏得到檢查職位現在的問題是如何改變背景顏色到該數組列表 – ravi

+0

正在獲取該主列表的位置itemsList1.get(i).setSelection(true);現在如何改變背景顏色 – ravi

相關問題