0

そのため、メイン アクティビティに setOnItemClickListener を次のように使用していました。

overviewEventListPending.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        final OverviewEvent clickedOverviewEvent  = (OverviewEvent) parent.getItemAtPosition(position);
        Intent intent = new Intent(OverviewActivity.this, OverviewEventDetails.class);
        intent.putExtra("overViewEventId", clickedOverviewEvent.uuid.toString());
        startActivity(intent);
    }
});

私の同僚が基本クラスとして ArrayAdapter の代わりに BaseAdapter を使い始めるまで、これはすべてうまくいきました。したがって、次のようにアダプター内にリスナーを実装したいと思います。

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = new ViewHolder();
    int type = getItemViewType(position);

    switch (type) {
       case TYPE_ITEM:
            OverviewEvent rowItem = (OverviewEvent) getItem(position);
            convertView = inflater.inflate(R.layout.overview_event, null);

            holder.description = (TextView) convertView.findViewById(R.id.overview_event_description);
            holder.amount = (TextView) convertView.findViewById(R.id.overview_event_amount);
            holder.actionDate = (TextView) convertView.findViewById(R.id.overview_event_date);
            holder.counterparty = (TextView) convertView.findViewById(R.id.overview_event_counterparty);
            holder.image = (ImageView) convertView.findViewById(R.id.overview_event_avatar);

            holder.description.setText(rowItem.eventDescription);
            holder.amount.setText(rowItem.getDisplayAmount());
            holder.amount.setTextColor(rowItem.getAmountColor());
            holder.actionDate.setText(rowItem.getDisplayDate());
            holder.counterparty.setText(rowItem.creditorDisplayName);
            ImageAdapter image = new ImageAdapter(context);

            try {
                holder.image.setImageBitmap(image.getImage(rowItem.avatarId).getBitmap());
            } catch (Exception e) {
                throw new RuntimeException("Failed to set overviewEvent avatar", e);
           }
           convertView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                Intent intent = new Intent(this, OverviewEventDetails.class);
                intent.putExtra("overViewEventId", uuid.toString());
                startActivity(intent);
                }
            });

            break;
        case TYPE_DIVIDER:
            OverviewEventDivider divider = (OverviewEventDivider) getItem(position);
            convertView = inflater.inflate(R.layout.overview_event_divider, null);
            TextView dividerTitle = (TextView) convertView.findViewById(R.id.overview_event_divider);
            dividerTitle.setText(divider.title);
            break;
    }

    return convertView;
}

それは今それを訴えThe constructor Intent(new View.OnClickListener(){}, Class<OverviewEventDetails>) is undefinedます。

これを解決する方法を知っている人はいますか?すべてのヒントは大歓迎です!

4

1 に答える 1

5
 Intent intent = new Intent(this, OverviewEventDetails.class);

上記の行では、アダプターから「this」を提供しているため、実際にはアダプターオブジェクトを提供していますが、実際には「Activity」コンテキスト/オブジェクトが必要です。したがって、コンストラクターを使用してアクティビティからコンテキストを取得し、次のようにインテント作成で使用する必要があります。

Intent intent = new Intent(context, OverviewEventDetails.class);
于 2013-09-30T14:47:28.897 に答える