2017-02-15 13 views
2

Как я могу найти фрагмент (framelayout) без id?Как я могу использовать фрагмент без id в android?

Вот мой код:

private void setRect(int _x, int _y, int _w, int _h){ 

     final Rect rect = new Rect(_x,_y,_w,_h); 

     final PSPDFConfiguration configuration = new PSPDFConfiguration.Builder(BuildConfig.PSPDFKIT_LICENSE_KEY) 
       .scrollDirection(PageScrollDirection.HORIZONTAL) 
       .build(); 

     final Uri assetFile = Uri.parse("file:///android_asset/psp.pdf"); 

     final FrameLayout frameLayout = new FrameLayout(thisContext); 

     runOnUiThread(new Thread(new Runnable() { 
      @Override 
      public void run() { 

       frameLayout.setId(View.generateViewId()); 

       FrameLayout.LayoutParams params; 

       params = new FrameLayout.LayoutParams(rect.right-rect.left,rect.bottom-rect.top); 
       params.leftMargin = rect.left; 
       params.topMargin = rect.top; 
       params.gravity = 0; 

       frameLayout.setLayoutParams(params); 

       viewer_one.setLayoutParams(params); 
       viewer_one.getSettings().setBuiltInZoomControls(true); 
       viewer_one.setBackgroundColor(Color.BLUE); 

       thisActivity.addContentView(viewer_one,params); 

       PSPDFFragment fragment; 

       FragmentManager manager = getSupportFragmentManager(); 

       fragment = (PSPDFFragment) manager.findFragmentById(frameLayout.getId()); 

       if(fragment == null){ 
        fragment = PSPDFFragment.newInstance(assetFile,configuration); 

        getSupportFragmentManager() 
          .beginTransaction() 
          .replace(frameLayout.getId(), fragment) 
          .commit(); 
       } 

      } 
     })); 


    } 

Я не использую framelayout в моем макета XML.

Update:

У меня обновить свой код и получить эту ошибку -> Без вида не найдено для идентификатора 0x1 (неизвестно) для фрагмента PSPDFFragment {373f9470

+0

'findFragmentByTag'? – pskink

+0

пример? Я не знаю тега :( – Tarasov

+0

, поэтому у вас нет идентификатора, нет тега, и что у вас есть? Что нужно для анонимного фрагмента для? – pskink

ответ

2

Set an ID to a view programatically

Присвоить идентификатор через программный код

Вручную установить идентификаторы usin g someView.setId(int); int должен быть положительным, но иначе произвольным - он может быть любым, что вы хотите (продолжайте читать, если это страшно.) Например, при создании и нумерации нескольких представлений, представляющих элементы, вы можете использовать их номер позиции.

Это должно сделать это. Теперь у вас есть идентификатор, используйте его для менеджера фрагментов. Надеюсь это поможет.