2016-08-30 13 views
0

Ich habe ein Layout, das in etwa wie folgt aussieht: Horizontal RecyclerView on top of Vertical RecyclerViewHorizontal RecyclerView oben Vertikale RecyclerView in RelativeLayout

Der gesamte rosa Bereich ist eine vertikale RecyclerView. Das untere Rechteck ist eine horizontale RecyclerView. Diese beiden Ansichten sind beide in einer RelativeLayout, wo die horizontale RecyclerView nach unten ausgerichtet ist.

Das Problem, das ich habe, ist dies: wenn die horizontale RecyclerView nicht genügend Elemente, um die Breite des Bildschirms zu füllen, würde ich gerne in der Lage sein, die vertikale RecyclerView dahinter zu scrollen. Wenn Sie also den grünen Pfeil im Bild betrachten, würde ich gerne in dieser Situation die vertikale RecyclerView scrollen.

Ich konnte nicht herausfinden, wie das funktioniert. Ich habe versucht, eine OnTouchListener einzurichten, die false zurückgibt, wenn ein Artikel in der horizontalen RecyclerViewNICHT berührt wird. Dies scheint jedoch nicht zu funktionieren.

Ich habe auch versucht, die Breite der horizontalen RecyclerView auf WRAP_CONTENT zu setzen, aber die RecyclerView hat aus irgendeinem Grund nicht die Größe geändert.

Gibt es trotzdem, nur die Durchfahrt durch die horizontale RecyclerView gehen lassen? Die horizontale RecyclerView hat das vertikale Scrollen deaktiviert, so dass ich glaube, dass es gar nichts mit den vertikalen Scrolls macht, es absorbiert sie nur.

Jeder Rat würde geschätzt werden. Vielen Dank!

Antwort

1

Für API < 23. Ich getestet folgende:

final RecyclerView listA = (RecyclerView) findViewById(R.id.ListA); 
    listA.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); 
    listA.setAdapter(new CustomViewAdapter(100, R.layout.list_a_item)); //first parameter is item count 

    final RecyclerView listB = (RecyclerView) findViewById(R.id.ListB); 
    listB.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); 
    listB.setAdapter(new CustomViewAdapter(4, R.layout.list_b_item)); // first parameter is item count 

    listB.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Rect r = new Rect(); 
      //get last child view of viewgroup. 
      listB.getChildAt(listB.getChildCount()-1).getGlobalVisibleRect(r); 
      //do not count margins 
      r.offset(-listA.getLeft(), 0); 
      if (event.getX() > r.right) { 
       //Pass touch event directly to backround recycle view 
       listA.onTouchEvent(event); 
       return true; 
      } 
      return false; 
     } 
    }); 

Ergebnis: enter image description here

+0

Das funktioniert! Danke vielmals! –

0

RecycleView wrap_content sollte ab API 23 funktionieren. Sie können wrap_content festlegen, damit die Ansicht den Bildschirm nicht füllt, wenn nicht genügend Elemente vorhanden sind.

Verwandte Themen