2016-08-11 7 views
0

안녕하세요. 아래 코드에서 내가 수행 한 작업을 간략하게 설명합니다. ViewStub (Vs)를 만들고 RelativeLayout (R1)에 추가합니다. 그런 다음 동일한 RL에 새 Vs를 추가하여 stub2를 만들고 rl에 추가합니다. 그러면 첫 번째와 두 번째 Vs (rlInf1, rlInf2)의 R1 (이는 inflatet입니다.) 그리고 나서 rlInf2가 rlInf1 아래에 있어야하지만 겹치지 않도록 Rl.Layoutparams를 설정합니다. 새 ViewStub가 이전 ViewPub의 아래에 있도록 LayoutParams를 어떻게 설정할 수 있습니까? 어떤 아이디어?첫 번째 아래에 두 번째 ViewStub를 추가하는 것보다 먼저 ViewStub를 RelativeLayout에 추가하십시오.

ViewStub가 없어 당신은 ViewStub로보기를 팽창되면

(나는 XML에 ViewStub을 추가 할 수 있지만 자바 코드에서하지 않았다)

//Löschen des Standard-Tv 
      TextView tv = (TextView) findViewById(R.id.tvNoContentInfo); 
      RelativeLayout rl = (RelativeLayout) findViewById(R.id.Layout_ContentInfo); 
      rl.removeView(tv); 
      //Erstellen eines ViewStubs 
      ViewStub stub1 = new ViewStub(this); 
      //zum richtigen Layout hinzufügen 
      rl.addView(stub1); 
      stub1.setLayoutResource(R.layout.routen_navi_infocontent); 
      //Referenz zum eingefügten Layout herstellen 
      View inflated = stub1.inflate(); 
      //Zugriff auf Inhalt des zufor referenzierten Layouts 
      TextView myTextView = (TextView) inflated.findViewById(R.id.tvHeaderInfocontent); 
      myTextView.setText("hey"); 
      stub1.setId(View.generateViewId()); 
      stub1.setInflatedId(stub1.getId()); 
      RelativeLayout rlInf1 = (RelativeLayout) inflated.findViewById(R.id.Layout_infocontent); 

      ViewStub stub2 = new ViewStub(this); 
      //zum richtigen Layout hinzufügen 
      rl.addView(stub2); 
      stub2.setLayoutResource(R.layout.routen_navi_infocontent); 
      //Referenz zum eingefügten Layout herstellen 
      View inflated2 = stub2.inflate(); 
      RelativeLayout rlInf2 = (RelativeLayout) inflated2.findViewById(R.id.Layout_infocontent); 
      RelativeLayout.LayoutParams p= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
      p.addRule(RelativeLayout.BELOW,rlInf1.getId()); 
      rlInf2.setLayoutParams(p); 
+0

당신을 위해 그'ViewStub's 무엇을해야합니까 사용하지 않고 레이아웃을 추가 할 수 있습니까? – pskink

+0

난 그냥 테스트 해보고 ... 나는 역동적 인면을 원한다.> 어쩌면 처음 2V가 필요하고 두 번째로 3 번 필요하다. 그리고 내가 원하는 실제 프로그래밍을 시작하기 전에 내가 Vs를 다른 위치보다 아래에 위치시킬 수 있는지 테스트하십시오. @pskink – Goetti

+0

BTW'LinearLayout'는 충분하지 않습니까? 대신'RecyclerView'를 쓰지 않는 이유는 무엇입니까? – pskink

답변

1

, 그래서에 ID를 변경 쓸모가 그것. 팽창 된보기에서 변경해야합니다. 그래서

stub1.setId(View.generateViewId());

inflated.setId(View.generateViewId());

변경과 마지막 두 줄 변경 : 또한

p.addRule(RelativeLayout.BELOW,inflated.getId()); 
    inflated2.setLayoutParams(p); 

을, 당신은 inflated에서 기존 LayoutParams를 잡아 할 수 있습니다 보기 만하고 새 것을 만들지 마십시오. 그렇지 않으면 끝납니다. 기존의 모든 것을 덮어 씁니다.

BTW : 나는 ViewStubs과 즉각적인 인플레이션 추가가 실제 흐름이 아닌 무언가를 테스트하는 것이라고 생각해야합니다. 맞습니까? :-)

ADDITION : 예, 당신이 바로 그 팽창하는 경우 ViewStub

View inflated = LayoutInflater.from(this).inflate(R.layout.routen_navi_infocontent, rl, false); 
    inflated.setId(View.generateViewId()); 
    rl.addView(inflated); 

    View inflated2 = LayoutInflater.from(this).inflate(R.layout.routen_navi_infocontent, rl, false); 
    RelativeLayout.LayoutParams p= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    p.addRule(RelativeLayout.BELOW,inflated.getId()); 
    inflated2.setLayoutParams(p); 
    rl.addView(inflated2); 

    TextView myTextView = (TextView) inflated.findViewById(R.id.tvHeaderInfocontent); 
    myTextView.setText("hey"); 
+0

고맙습니다. (목록이있는) 다른 whay를 찾았지만 문제는 목록이 첫 번째 항목 만 표시하고 두 번째는 표시하지 않기 때문에 목록과 함께 할 수 없다면 나는 당신의 코드를 테스트 할 것이다 – Goetti

+0

Ohhh 그냥 실패했다 : D 두 요소를 보여 주지만 스크롤해야 ... 목록이 너무 길면 상대 레이아웃이 확장 될 것이라고 생각 ... @ NT – Goetti