首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Adapter到Intent

从Adapter到Intent
EN

Stack Overflow用户
提问于 2021-08-28 10:58:55
回答 1查看 31关注 0票数 0

我有一个ListView适配器。该列表中的每个项目都有一个按钮,当用户按下该按钮时,它将进入另一个活动,其中包含有关该特定项目的信息(信息是从其关联的对象中获取的)。

当我按下按钮时,我将创建一个新的Intent对象,将user.getOfferID()放入其中,然后启动该活动,如何才能做到这一点呢?我试过用老式的方法,但它不让我写startActivity(intent);,说它不存在。

我该怎么做呢?

这是适配器:

代码语言:javascript
复制
package com.example.create4me;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class UsersAdapter extends ArrayAdapter<UserItem> {
    public UsersAdapter(Context context, ArrayList<UserItem> users) {
        super(context, 0, users);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        UserItem user = getItem(position);
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.userlayout, parent, false);
        }
        TextView username = (TextView) convertView.findViewById(R.id.userlayoutUsername);
        TextView timestamp = (TextView) convertView.findViewById(R.id.userlayoutTimestamp);
        TextView isComplete = (TextView) convertView.findViewById(R.id.isComplete);
        Button viewPurchase = (Button) convertView.findViewById(R.id.userlayoutViewBtn);
        username.setText(user.getUsername());
        timestamp.setText(user.getTimestamp());
        isComplete.setText(user.getIsComplete());
        viewPurchase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //How can I make it so HERE I go into another acitivity that will also
                //get user.getOfferID() as a parameter?
                //The button works since the Toast is shown when I click it
                
                Toast.makeText(getContext(), "I was clicked", Toast.LENGTH_LONG).show();
            }
        });
        return convertView;
    }
}

下面是UserItem类:

代码语言:javascript
复制
package com.example.create4me;

public class UserItem {
    String username, timestamp, offerID, isComplete;
    public UserItem(String username, String timestamp, String offerID, String isComplete){
        this.username = username;
        this.timestamp = timestamp;
        this.offerID = offerID;
        this.isComplete = isComplete;
    }
    public String getUsername(){
        return this.username;
    }
    public String getTimestamp(){
        return this.timestamp;
    }
    public String getOfferID(){
        return this.offerID;
    }
    public String getIsComplete(){
        return this.isComplete;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-28 20:27:21

startActivity(intent)不是免费的,你需要一个上下文。您可以在普通的activity类中调用startActivity(intent),因为它内置了上下文变量。因为您创建了一个新的类UsersAdapter,所以您需要通过创建一个新的实例变量来存储从构造函数传递的上下文。

代码语言:javascript
复制
private Context context;

然后在构造函数中分配它。

代码语言:javascript
复制
public UsersAdapter(Context context, ArrayList<UserItem> users) {
    super(context, 0, users);
    this.context = context;
}

现在,在setOnClickListener中,您可以使用上下文调用startActivity,Android Studio将不会显示错误。

代码语言:javascript
复制
context.startActivity(yourIntent);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68963695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档