2016-05-12 5 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; 

    } 

、特定のカードのデータを押す。 しかし、長い押しでリストにデータを渡すときは、最初に押されたデータが最初に表示され、次に現在のデータが表示されます。

私の2番目の質問は、別のクラスのこのリストにアクセスしようとしていますが、動作していません。他のクラスの
コードはこれを行うにはどのように

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-アンドロイド –

+0

長い間押されたときにアイテムを持ち、それをarraylistに保管して、次のアクティビティやフラグメントに運びたい場合があります。そうですか? –

+0

私はこれのためにparcelable好む。バンドルの使用 –

答えて

0

あなたはそのようなあなたのRecyclerViewGestureDetectorを追加することができます。

まず第一には、その後、その

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) {} 
    }); 

そして、あなたはこのリストを使用したい場合別のクラスには、私はイベントバスを使用するように勧めます:

あなたのMessageListEventクラス:OnCreateイベントであなたのフラグメントまたは他のクラスで

public class MessageListEvent { 


private ArrayList<Message> messageList; 

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

} 

@Subscribe 
public void onMessageEvent(MessageListEvent event){ 

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


} 

あなたbuild.gradleにこれを追加します:compile 'org.greenrobot:eventbus:3.0.0'

+0

あなたの答えは彼の質問とは関係ありません。私はそうだと思います –

+0

@ Log.dに感謝します。私はちょうど "私の2番目の質問は別のクラスのこのリストにアクセスしようとしていますが、動かない"モットーです。そして私は彼にイベントバスを使うことを勧めます。彼はこの答えを他の人と組み合わせることができます –

+0

私はこれを試してみます –

0

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

は、次にメソッドを購読オーバーライド

RecyclerViのアダプタのViewHolderでええ、あなたができる...

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

はい。私はそれをしましたが、それは動作していないようです –

関連する問題