从适配器到意图
Posted
技术标签:
【中文标题】从适配器到意图【英文标题】:From Adapter into Intent 【发布时间】:2021-10-28 00:00:52 【问题描述】:我有一个用于 ListView 的适配器。该列表中的每个项目都有一个按钮,当用户按下该按钮时,它将进入另一个活动,其中包含有关该特定项目信息的信息(信息来自它的关联对象)。
我怎样才能做到这一点,当我按下按钮时,我将创建一个新的 Intent 对象,将 user.getOfferID() 放入其中,然后启动该活动?我试过用老式的方式,但它不允许我写startActivity(intent);
,说它不存在。
我该怎么做?
这是适配器:
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 类:
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;
【问题讨论】:
你可以通过 2 种方式做到这一点,1)使用上下文对象调用 startActivity 方法像这样context.startActivity(intent);
2)你可以使用 callback 概念的帮助下界面。
【参考方案1】:
startActivity(intent) 不是免费的,你需要一个上下文。您可以在普通活动类中调用 startActivity(intent),因为它内置了上下文变量。因为您创建了一个新类 UsersAdapter,所以您需要通过创建一个新的实例变量来存储从构造函数传递的上下文。
private Context context;
然后在构造函数中赋值。
public UsersAdapter(Context context, ArrayList<UserItem> users)
super(context, 0, users);
this.context = context;
现在在 setOnClickListener 中,您可以使用上下文调用 startActivity,Android Studio 不会显示错误。
context.startActivity(yourIntent);
【讨论】:
我实际上将 this.context = context 放在了超级 bcs 下,否则它并没有让我这样做,但是是的,它起作用了!非常感谢! @qwirrr 我的错误,感谢您的纠正,我已经编辑了。无论如何,因为您的类继承了 ArrayAdapter 类,其中包含上下文,您可以直接调用 getContext().startActivity(yourIntent) 而无需创建新的实例变量。以上是关于从适配器到意图的主要内容,如果未能解决你的问题,请参考以下文章