Inflate layout programmatically within another layout

前端 未结 8 2030
心在旅途
心在旅途 2020-11-30 04:54

I need help with my android app. I need inflate a layout within another layout and I dont know how I do. My xml code is this:

  • item.xml - I need inflate mult

相关标签:
8条回答
  • 2020-11-30 04:56

    You can implement this like below:

    LayoutInflater linf;
    LinearLayout rr;
    
    linf = (LayoutInflater) getApplicationContext().getSystemService(
            Context.LAYOUT_INFLATER_SERVICE);
    linf = LayoutInflater.from(activity.this);
    
    rr = (LinearLayout) findViewById(R.id.container_destacado);
    
    for (int i = 1; i < NoOfTimes; i++) {
    
        final View v = linf.inflate(R.layout.item, null);
        rr.addView(v);
    }
    
    0 讨论(0)
  • 2020-11-30 04:56

    You have the LinearLayout on which you want to inflate other childs:

    LinearLayout container = (LinearLayout)parentView.findViewById(R.id.container_destacado);
    

    Once you loaded the item.xml with an inflater, you can just use

    container.addView(itemView);
    
    0 讨论(0)
  • 2020-11-30 04:59

    Below is a working code from one of my projects:

    // The parent container
    mNotificationOverlay = (LinearLayout) findViewById(R.id.container_destacado);   
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    for (Message message : m) {
    
        // Inflate the child layout on the fly
        final View notificationContainer = inflater.inflate(R.layout.notification_overlay_linear_layout, null);
        notificationContainer.setTag(message.getNotificationId());
    
        // Access children of child container
        TextView notificationOverlayTitle = (TextView) notificationContainer.findViewById(R.id.notification_title_overlay);
        TextView notificationOverlayBody = (TextView) notificationContainer.findViewById(R.id.notification_body_overlay);
        ImageButton notificationOverlayCancelButton = (ImageButton) notificationContainer.findViewById(R.id.notification_cancel_overlay);
    
        // Perform desired operations
        notificationOverlayCancelButton.setTag(message.getNotificationId());
        notificationOverlayTitle.setText(message.getTitle());
        notificationOverlayBody.setText(message.getNotificationBody());
        mNotificationOverlay.setVisibility(View.VISIBLE);
    
        // Attach any listeners
        attachListenersToCancelView(notificationOverlayCancelButton);
    
        // Add view to parent container
        mNotificationOverlay.addView(notificationContainer);
    }
    

    Hope that helps!

    0 讨论(0)
  • 2020-11-30 05:01

    You could use something like

    LayoutInflater inflater = LayoutInflater.from(context);
    
    //to get the MainLayout
    View view = inflater.inflate(container_destacado, null);
    ...
    //Avoid pass null in the root it ignores spaces in the child layout
    
    View inflatedLayout= inflater.inflate(R.layout.yourLayout, (ViewGroup) view, false);
    containerDestacado.addView(inflatedLayout);
    
    0 讨论(0)
  • 2020-11-30 05:01

    In some point you should gain access to your inflater inside your activity, you can call it with this code:

    LayoutInflater li = LayoutInflater.from(context);
    

    Where context is this or this.getActivity() if it is a Fragment. Then inflate your layour with:

    View layout = li.inflate(R.layout.your_layout, null, false);
    

    Then use addView(layout) to your container_destacado:

    View containerDestacado = li.inflate(R.layout.container_destacado, null, false);
    containerDestacado.addView(layout);
    

    Hope it helps.

    0 讨论(0)
  • 2020-11-30 05:02
    ll = (LinearLayout) findViewById(R.id.container_destacado);  // ll is the layout where your inflated layout will be added 
    linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    int pos = 0;
        while (pos < noOfTimes) 
        {
            View myView = linflater.inflate(R.layout.item, null); //here item is the the layout you want to inflate 
            myView.setId(pos);
            /*
               You can change TextView text and ImageView images here e.g.
               TextView tv = (TextView)myView.findViewById(R.id.title_N1);
               tv.setText(pos);
    
            */
            pos++;
            ll.addView(myView);
        }
    
    0 讨论(0)
提交回复
热议问题