0

私は現在 Monodroid でプログラミングしており、Listview の拡張に問題があります。

現在、ListView を次のように拡張しています。

public class TTListView : ListView
{
    private Context mContext;
    private bool wrapAdapter;

    public TTListView(Context context) :
        base(context)
    {
        Initialize();
        this.mContext = context;
    }

    public TTListView(Context context, IAttributeSet attrs) :
        base(context, attrs)
    {
        Initialize();
        this.mContext = context;
    }

    public TTListView(Context context, IAttributeSet attrs, int defStyle) :
        base(context, attrs, defStyle)
    {
        Initialize();
        this.mContext = context;
    }

    private void Initialize()
    {
        this.CacheColorHint = Color.Transparent;
        //Still some more stuff to be added here
    }

    public void InsertItemAt(int index)
    {
        Animation anim = AnimationUtils.LoadAnimation(
                 mContext, Resource.Animator.slide_top_down);
        anim.Duration = 500;
        this.GetChildAt(index).StartAnimation(anim);
    }

    public void SetDelegate(TTListDelegate _delegate)
    {
        this.OnItemClickListener = (IOnItemClickListener)_delegate;
        this.OnItemLongClickListener = (IOnItemLongClickListener)_delegate;
    }

    public override void AddFooterView(View v)
    {
        base.AddFooterView(v);
        wrapAdapter = true;
    }

    /*public override IListAdapter Adapter
    {
        get
        {
            return base.Adapter;
        }
        set
        {
            //Check if the passed parameter is a TTListAdapter
            TTListAdapter _ttadapter = value as TTListAdapter;
            if (_ttadapter != null)
            {
                _ttadapter.Wrapped = wrapAdapter;
            }
            base.Adapter = value;
        }
    }*/
}

上記のコードは完全に正常に動作します。これに関する問題は、Adapter プロパティ (現在はコメントアウトされています) をオーバーライドしようとしているときに、TTListViewオブジェクトを作成しようとすると次の例外が発生することです。

"Unable to activate instance of type TimeTellApp.TTListView from native handle 40557188. No constructor found for TTListView::.ctor(System.IntPtr, Android.Runtime.JniHandleOwner)"

通常、これは GC がマネージド マップ オブジェクトを破棄することに関係しているため、これまではオブジェクトへの参照を保持することでこの種の問題を解決していました。の問題は、TTListView初期化のためにコンストラクターを呼び出すときに例外が既に発生していることです。

次のような TTListView オブジェクトを作成します。

TTListView setting_listview = new TTListView(this);

(これは ですActivity) ここで何が問題であり、それを解決する最善の方法は何ですか?

4

1 に答える 1

1

エラー メッセージは、実装する必要がある特定のコンストラクターがクラスにないことを示しています。

protected ListView (IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer)

于 2012-10-01T11:46:01.153 に答える