Search code examples
javaandroidadmobnative

Native Ad Admob to Custom List Adapter in Android


I'm struggling to find a way to add a native ad within my app on Android.

MainActivity Class:

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab1, container, false);

        final String[] numbers = {"one","two", "", "three", "four", "five","six","seven" "eight","nine", "ten" "eleven","twelve", "thirteen"};


        Integer[] images = {0,1,2,3,4,5,6,7,8,9,10,11,12,13
        };

        CustomListAdapter adapter=new CustomListAdapter(this.getActivity(), mobileArray, images);

        NativeExpressAdView adView = (NativeExpressAdView) rootView.findViewById(R.id.adView);
        AdRequest request = new AdRequest.Builder().build();
        adView.loadAd(request);

        list=(ListView) rootView.findViewById(R.id.list_view);
        list.setAdapter(adapter);

CustomListAdapter Class:

public class CustomListAdapter extends ArrayAdapter<String> {

    private final Activity context;
    private final String[] numbers;
    private final Integer[] imgid;

    public CustomListAdapter(Activity context, String[] numbers, Integer[] imgid) {
        super(context, R.layout.listv, itemname);
        // TODO Auto-generated constructor stub

        this.context=context;
        this.numbers=numbers;
        this.imgid=imgid;
    }

    public View getView(int position,View view,ViewGroup parent) {
        LayoutInflater inflater=context.getLayoutInflater();
        View rowView=inflater.inflate(R.layout.listv, null,true);

        NativeExpressAdView adView = (NativeExpressAdView) rowView.findViewById(R.id.adView);
        TextView txtTitle = (TextView) rowView.findViewById(R.id.number);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imgid);
        TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);


        txtTitle.setText(numbers[position]);
        imageView.setImageResource(imgid[position]);
        extratxt.setText("Number: "numbers[position]);

        return rowView;

    };
}

I want to add the native add within a particular index in array, ideally where it shows "". I'm trying to add the adView into the adapter but unsure how to do this.

Edit:

listv layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/imgid"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:padding="5dp" />
    <LinearLayout android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="5dp"
            android:padding="2dp"
            android:textColor="#4CBE99" />
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"/>


    </LinearLayout>

</LinearLayout>


<com.google.android.gms.ads.NativeExpressAdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="visible"
    android:layout_gravity="center"
    ads:adSize="345x80"
    ads:adUnitId="ca-app-pub-3940256099942544/2793859312"></com.google.android.gms.ads.NativeExpressAdView>

Solution

  • You can try like this,

    public class CustomListAdapter extends ArrayAdapter<String> {
    
    
        private NativeExpressAdView adView;
    
        private NativeExpressAdView getAddView() {
            if (adView != null) {
                return adView;
            }
            adView = new NativeExpressAdView(context);
    
            adView.setAdUnitId("[your unit id]");
            adView.setAdSize(new AdSize(AdSize.FULL_WIDTH, 80));
    
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            adView.setLayoutParams(layoutParams);
            AdRequest request = new AdRequest.Builder().build();
            adView.loadAd(request);
    
            return adView;
        }
    
        public View getView(int position, View view, ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            View rowView = inflater.inflate(R.layout.layout_add, null, true);
    
    //        NativeExpressAdView adView = (NativeExpressAdView) rowView.findViewById(R.id.adView);
    
            LinearLayout linearLayout = (LinearLayout) rowView.findViewById(R.id.addView);
    
            linearLayout.removeAllViews();
            TextView txtTitle = (TextView) rowView.findViewById(R.id.number);
            ImageView imageView = (ImageView) rowView.findViewById(R.id.imgid);
            TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);
    
    
            txtTitle.setText(numbers[position]);
            imageView.setImageResource(imgid[position]);
            extratxt.setText("Number: " + numbers[position]);
    
            if (position == 2) {
                linearLayout.addView(getAddView());
                linearLayout.setVisibility(View.VISIBLE);
            } else {
                linearLayout.removeAllViews();
                linearLayout.setVisibility(View.GONE);
            }
    
            return rowView;
    
        }
    
        ;
    }
    

    Layour xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
    
            <ImageView
                android:id="@+id/imgid"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:padding="5dp"/>
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <TextView
                    android:id="@+id/number"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_marginTop="5dp"
                    android:padding="2dp"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:textColor="#4CBE99"/>
    
                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"/>
            </LinearLayout>
    
        </LinearLayout>
    
        <LinearLayout
            android:id="@+id/addView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"></LinearLayout>
    </LinearLayout>