2017-10-11 60 views
2

我做了一個ContextMenuListView,並且一切工作完美。但是,我無法弄清楚如何將所選項目發送到其他活動?發送從上下文菜單選擇的項目到另一個活動

我看了很多教程,但沒有找到解決方案。

每個項目表示兩個字段(兩個字符串(產品,價格)用JSON字符串解析。

listViewProduse.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
    listViewProduse.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 
     @Override 
     public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
      final int checkedCount = listViewProduse.getCheckedItemCount(); 
      mode.setTitle(checkedCount + " product selected"); 
     } 

     @Override 
     public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
      MenuInflater inflater = mode.getMenuInflater(); 
      inflater.inflate(R.menu.main_context, menu); 

      return true; 
     } 

     @Override 
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
      return false; 
     } 

     @Override 
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
      switch (item.getItemId()){ 
       case R.id.add_id: 
        SparseBooleanArray selected = adapter.getSelectedIds(); 

        String copyText=""; 
        for (int i = (selected.size() - 1); i >= 0; i--){ 
         if (selected.valueAt(i)){ 
          VanzatorProduse selectedListItem = adapter.getItem(selected.keyAt(i));         
         } 
        } 
        mode.finish(); 
        return true; 
       default: 
        return false; 
      } 
     } 
+0

向另一個活動發送內容的最基本的方式是使用一個「Intent」,並將要發送的內容添加爲「Extra」。請參閱https://stackoverflow.com/questions/6707900/pass-a-string-from-one-activity-to-another-activity-in-android或https://stackoverflow.com/questions/18146614/how-發送字符串從一個活動到另一個或更多... – deHaar

回答

0

您可以VanzatorProduse實現以放入用於啓動新的活動的意圖Parcelable接口。如果你說的這個類既有產品和價格,一個可能的實現可能如下:

public class VanzatorProduse implements Parcelable { 
    private String product; 
    private double price; 

    public VanzatorProduse(String product, double price) { 
     this.product = product; 
     this.price = price; 
    } 

    protected VanzatorProduse(Parcel in) { 
     product = in.readString(); 
    } 

    public static final Creator<VanzatorProduse> CREATOR = new Creator<VanzatorProduse>() { 
     @Override 
     public VanzatorProduse createFromParcel(Parcel in) { 
      return new VanzatorProduse(in); 
     } 

     @Override 
     public VanzatorProduse[] newArray(int size) { 
      return new VanzatorProduse[size]; 
     } 
    }; 

    public String getProduct() { 
     return product; 
    } 

    public double getPrice() { 
     return price; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeString(product); 
     parcel.writeDouble(price); 
    } 
} 

然後在你的onActionItemClicked只需聲明的VanzatorProduseArrayList並如下添加到Intent

ArrayList<VanzatorProduse> products = new ArrayList<>(); 
for (int i = (selected.size() - 1); i >= 0; i--) { 
    if (selected.valueAt(i)) { 
     VanzatorProduse selectedListItem = adapter.getItem(selected.keyAt(i));  
     products.add(selectedListItem);  
    } 
} 
Intent intent = new Intent(YourActivity.this, YourSecondActivity.class); 
intent.putParcelableArrayListExtra("your_key", products); 
startActivity(intent); 

最後,在你的第二個活動,您檢索來自onCreate方法的值如下:

Intent intent = getIntent(); 
ArrayList<VanzatorProduse> products = intent.getParcelableArrayListExtra("your_key"); // same key used as before 

希望它有幫助。

+0

我怎麼能顯示它在一個列表視圖至極我有第二個活動? – android

+0

如上所示,在第二個活動中,您已經可以訪問ArrayList 。因此,唯一剩下的就是通過擴展BaseAdapter類爲RecyclerView創建一個適配器,或者如果您的需求真的非常簡單,您可以使用ArrayAdapter(並且重寫VanzatorProduse上的toString以返回每個項目在列表顯示)。 – fergaral

相關問題