2016-05-12 35 views
0

我有一個RecyclerView其中包含若干數據存儲在CardView長按我啓用上下文菜單後,也。
但我想要做的是將數據存儲在列表<>中,然後從另一個活動類中檢索它,我可以使用這些數據設置某些特定的EditText
我不知道在那裏我得到什麼錯在這裏是我的代碼: -
長按獲取數據,並在列表存儲從RecyclerView獲取數據長按

public List<String> Data=new ArrayList<>(); 
TextView name,qunat,refill; 
String nameMed,quantity,refillAmt; 

    @Override 
      public void onItemLongClick(View view, int position) { 
      name = (TextView) view.findViewById(R.id.nameOfUpmingMed); 
      qunat=(TextView)view.findViewById(R.id.QuantOfMed); 
      refill=(TextView)view.findViewById(R.id.ReffilAmt); 
      nameMed = name.getText().toString(); 
      quantity=qunat.getText().toString(); 
      refillAmt=refill.getText().toString(); 
      passData(nameMed,quantity,refillAmt,); 
//   Data.add(nameMed);Data.add(quantity);Data.add(refillAmt); 

      } 
     })); 

public List<String> passData(String name, String quant, String refillAmt){ 
     String Name,Quant,Refill; 
     Name=name;Quant=quant;Refill=refillAmt; 
     Data.add(Name); 
     Data.add(Quant); 
     Data.add(Refill); 
     for(int i=0;i<Data.size();i++){ 
      Toast.makeText(getActivity(), "Pressed card is and "+Data.get(i), Toast.LENGTH_SHORT).show(); 
     } 
     return Data; 

    } 

當我檢索長數據單擊它工作正常,它會按下特定卡的數據。 但是,當我長時間傳遞數據列表時,它會先顯示先前按下的數據,然後顯示當前數據。

我的第二個問題是我想在另一個類訪問這個列表,但它不工作。對於其他類
代碼爲

prescriptionFragment=new PrescriptionFragment(); 
for(int i=0;i < prescriptionFragment.Data.size();i++){ 
      if(i==0){ 
       Toast.makeText(getApplication(),"data is "+prescriptionFragment.Data.get(i),Toast.LENGTH_LONG).show(); 
      } 
     } 

如何做到這一點,我如何從一個類中獲取數據到另一個卡片視圖中長按。或者有沒有其他的方式來做到這一點。

+0

也許我建議採取看看這個http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-on- android –

+0

你可能需要在長時間按下該項目並將其存儲到數組列表中並將其移至下一個活動或片段。是對的嗎? –

+0

我更喜歡parcelable這個。使用套餐 –

回答

0

您可以添加GestureDetectorRecyclerView這樣的:

首先創建這樣的

List <Message> longPressedList=new ArrrayList<Message>(); 


final GestureDetector messageGestureDetector = new GestureDetector(MessageActivity.this, new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      return true; 
     } 

     @Override 
     public void onLongPress(MotionEvent e) { 
      View child = recyclerviewmessages.findChildViewUnder(e.getX(), e.getY()); 
      Message longClickedMessage= new Message(); 
       if (recyclerviewmessages.getChildPosition(child) >= 0 && recyclerviewmessages.getChildPosition(child) <= Messages.size()) { 
        longClickedMessage= Messages.get(recyclerviewmessages.getChildPosition(child)); 
        //add to arraylist 
        longPressedList.add(longClickedMessage); 
        //send new list to other class 
        EventBus.getDefault().postSticky(new MessageListEvent (longPressedList)); 

       } 


     } 
    }); 

一個ArrayList中那麼:

recyclerviewmessages.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 
     @Override 
     public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) { 
      View child = recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY()); 

      if (child != null && messageGestureDetector.onTouchEvent(motionEvent)) { 
       //here your recyclerview touch event if matchs gesture detector 
       //you return true , else return false 

       return true; 
      } 

      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {} 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean b) {} 
    }); 

如果你想使用這個列表到另一班我建議你使用EventBus:

你MessageListEvent類:

public class MessageListEvent { 


private ArrayList<Message> messageList; 

public MessageListEvent (ArrayList<Message> messages){ 
    this.messageList=messages; 

} 

在您的片段或其他類的OnCreate:

if (!EventBus.getDefault().isRegistered(this)) { 
     EventBus.getDefault().register(this); 
    } 

然後覆蓋訂閱方法:

@Subscribe 
public void onMessageEvent(MessageListEvent event){ 

     //you can get list like that : event.messageList 


} 

添加到您的build.gradlecompile 'org.greenrobot:eventbus:3.0.0'

+0

您的回答與他的問題無關。我認爲是這樣的 –

+0

謝謝@ Log.d,我只是專注於「我的第二個問題是我想在另一個班級訪問這個列表,但它不工作」的座右銘。我建議他使用eventbus。他可以結合這個答案與其他人 –

+0

好吧,我會嘗試這 –

0

在RecyclerVi適配器的ViewHolder中EW,你可以做...

class YourViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener 
{ 
    TextView name, qunat, refill; 

    public YourViewHolder(View view) 
    { 
     super(view); 
     name = (TextView) view.findViewById(R.id.nameOfUpmingMed); 
     qunat=(TextView)view.findViewById(R.id.QuantOfMed); 
     refill=(TextView)view.findViewById(R.id.ReffilAmt); 

     view.setOnLongClickListener(this); 
    } 

    @Override 
    public boolean onLongClick(View v) 
    { 
     String nameMed = name.getText().toString(); 
     String quantity = qunat.getText().toString(); 
     String refillAmt = refill.getText().toString(); 
     passData(nameMed,quantity,refillAmt,); 
     //Do other stuff you need to do. 
     return true; 
    } 
} 
+0

好吧,但我怎麼把它帶到下一個類 –

+0

你的意思是如何可以從另一個類獲得您的數據列表? – esfox

+0

是的。我已經這樣做了,但它似乎不起作用 –