java - 尝试将自定义 BaseAdapter 设置为 listview

标签 java android listview baseadapter

我正在努力实现这一目标:http://blog.uncommons.org/2011/05/09/embedding-admob-adverts-in-android-listviews/ .

我被困在设置自定义 BaseAdapter 上,我根本不知道要在下面的 BASEADAPTER 变量中放入什么内容。

这是我的适配器

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;

/**
 * List adapter decorator that inserts adverts into the list.
 * @author Daniel Dyer
 */
public class AdvertisingAdapter extends BaseAdapter
{
    private static final String ADMOB_PUBLISHER_ID = "---------------";

    private final Activity activity;
    private final BaseAdapter delegate;

    private int resource;

    private ArrayList<String> objects;



    public AdvertisingAdapter(Activity activity, int resource, BaseAdapter delegate, 
            ArrayList<String> stories) {
        // TODO Auto-generated constructor stub

        this.resource = resource;
        this.activity = activity;
        this.delegate = delegate;
        this.objects = stories;
        delegate.registerDataSetObserver(new DataSetObserver()
        {
            @Override
            public void onChanged()
            {
                notifyDataSetChanged();
            }

            @Override
            public void onInvalidated()
            {
                notifyDataSetInvalidated();
            }
        });
    }

    public int getCount()
    {
        return delegate.getCount() + 1;
    }

    public Object getItem(int i)
    {
        return delegate.getItem(i - 1);
    }

    public long getItemId(int i)
    {
        return delegate.getItemId(i - 1);
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
        if ((position % 10) == 0)
        {
            if (convertView instanceof AdView)
            {
                return convertView;
            }
            else
            {
                AdView adView = new AdView(activity, AdSize.BANNER, ADMOB_PUBLISHER_ID);
                // Disable focus for sub-views of the AdView to avoid problems with
                // trackpad navigation of the list.
                for (int i = 0; i < adView.getChildCount(); i++)
                {
                    adView.getChildAt(i).setFocusable(false);
                }
                adView.setFocusable(false);
                // Default layout params have to be converted to ListView compatible
                // params otherwise there will be a ClassCastException.
                float density = activity.getResources().getDisplayMetrics().density;
                int height = Math.round(AdSize.BANNER.getHeight() * density);
                AbsListView.LayoutParams params
                    = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,
                                                   height);
                adView.setLayoutParams(params);
                adView.loadAd(new AdRequest());
                return adView;
            }
        }
        else
        {
            return delegate.getView(position - 1, convertView, parent);
        }
    }

    @Override
    public int getViewTypeCount()
    {
        return delegate.getViewTypeCount() + 1;
    }

    @Override
    public int getItemViewType(int position)
    {
        return position == 0 ? delegate.getViewTypeCount()
                             : delegate.getItemViewType(position - 1);
    }

    @Override
    public boolean areAllItemsEnabled()
    {
        return false;
    }

    @Override
    public boolean isEnabled(int position)
    {
        return position != 0 && delegate.isEnabled(position - 1);
    }
}

在我的主要 Activity 中,我尝试设置我的自定义基本适配器。 BASEADAPTER 参数应该是什么?

 mListView.setAdapter(new AdvertisingAdapter(this,
                android.R.layout.simple_list_item_1, BASEADAPTER, stories));

最佳答案

这取决于您尝试在 ListView 中显示或显示的内容,通常应用程序上下文和所需数据将传递给BaseAdapter构造函数。有关详细信息,请阅读 BaseAdapter甚至检查 Android ListView详细教程。

关于java - 尝试将自定义 BaseAdapter 设置为 listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20343242/

相关文章:

android - ViewPager 内的 ListView 不滚动

java - 为什么 Java 的 String.getBytes() 使用 "ISO-8859-1"

java - 使用 Java 创建 'User Account' 接口(interface),就像在 Windows 中一样

java - 在 Excel POI 上创建特定路径

AndroidManifest - 一个 Intent 过滤器应该有多个 Action 吗?

android - ExpandableListView中的SwipeListView,可以吗?

java - 最快的同步技术

java - 找不到字段的 getter

android - Google Play 服务位置和地理围栏 API 在 Genymotion 上无法正常工作

android - 获取数据后ListView消失