1

以下に示すように、AdaptarのListViewを表示するアクティビティを使用してメッセージのリストを表示しています。

DiscussArrayAdapter以下のクラス内のImageViewにContextMenuメニューを登録する必要があります。

私がそれregisterForContextMenu(arrowImage);から電話するだけDiscussArrayAdapterではそれを受け入れません。

また、メソッドをオーバーライドする場所がわかりませんonCreateContextMenu

私のmessageActivityは次のとおりです。

public class MessagesActivity extends Activity  {
        private ListView listView = null;

        /** Called when the activity is first created. */
        private DiscussArrayAdapter adapter;
        private ListView lv;
@Override
       public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_discuss);

            registerReceiver(mHandleMessageReceiver, new IntentFilter(
                            DISPLAY_MESSAGE_ACTION));

            adapter = new DiscussArrayAdapter(getApplicationContext(), R.layout.listitem_discuss);

            lv.setAdapter(adapter);

そして私はDiscussArrayAdapterクラスを持っています:

public class DiscussArrayAdapter extends ArrayAdapter<OneMessage>{

    private /*TextView*/EditText msgTextView;
    private  TextView sender;

    private LinearLayout wrapper;

    private SqlHelper dbHelper = null;
    private Context context;
    @Override
    public void add(OneMessage object) {

        dbHelper.addNewMessage(object);
        super.add(object);
    }

    public DiscussArrayAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
        this.context=context;

        if (dbHelper == null) {
            dbHelper = new SqlHelper(context);

        }


    }

    public int getCount() {

        return  dbHelper.getContactsCount();
    }

    public OneMessage getItem(int index) {

        return dbHelper.getOneComment(index+dbHelper.lastRawID());
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.listitem_discuss, parent, false);
        }

        wrapper = (LinearLayout) row.findViewById(R.id.wrapper);

        ImageView arrowImage = (ImageView) row.findViewById(R.id.aquaplayicon);
    //  this .registerForContextMenu(arrowImage);
        OneMessage coment = getItem(position);

        msgTextView =/*(TextView)*/(EditText) row.findViewById(R.id.comment);

簡潔にするために、残りのコードは省略しました。

4

2 に答える 2

4

contextメニュー関数はすべてクラスに対して定義されており、クラスにActivityは存在しませんAdapter

したがってadapter、のサブクラスを作成するか、レジスタ関数を呼び出すことができるようににを渡す必要があり、アクティビティはメニューを処理する必要がありますactivity(またはイベントをアダプタに渡して処理する必要があります) 。activityadaptercontext

于 2013-02-21T20:23:46.093 に答える
4

コンテキスト変数をActivityクラスでキャストする必要があります。

private Context context;

public ExpandibleListViewAdapter(Context context) {
        this.context = context;
    }

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parentView) {

    if (convertView == null) {
       ......
    }

    .........

    ((Activity)context).registerForContextMenu(convertView);

    return convertView;
}
于 2015-02-16T22:56:37.637 に答える