2

ListView에 대해 ContextMenu을 작성했습니다. 모든 것이 완벽하게 작동합니다. 그러나 선택한 항목을 다른 활동으로 보내는 방법을 알 수 없습니까?선택한 항목을 컨텍스트 메뉴에서 다른 활동으로 보내기

많은 자습서를 살펴 보았지만 해결책이 없습니다.

각 항목은 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

무언가를 다른 활동에 보내는 가장 기본적인 방법은 '의도'를 사용하고 '추가'로 발송할 항목을 추가하는 것입니다. https://stackoverflow.com/questions/6707900/pass-a-string-from-one-activity-to-another-activity-in-android 또는 https://stackoverflow.com/questions/18146614/how- to-send-from-one-activity-to-another 또는 more more ... – 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에 추가 :

당신이 onCreate 방법의 값을 검색 할 두 번째 활동
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); 

마지막으로, 다음 같이

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

관련 문제