[英]Accessing a Variable from an Activity to a RecyclerView Adapter
我是android的新手,我有两个类: Activity类BureauRateListing.java
和Adapter类CurrencySelectorAdapter.java
。
所以我想从一个活动类访问此变量( public String bs;
)到onBindViewHolder()
方法中的RecyclerView Adapter
类,以下是我的活动类:
public String bs;
private Intent i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rate_recycler_view);
raterv = (RecyclerView) findViewById(R.id.raterv_rv);
i = getIntent();
bs = i.getStringExtra("buysell");
}
现在,我该如何从onBindViewHolder()
方法内的Activity class
到Adapter类中访问变量 ( public String bs;
),并将其作为Extra发送给NextActivity。 下面是我的onBindViewHolder()
方法,我想在其中访问变量并将其作为Extra发送:
@Override
public void onBindViewHolder(CurrencyViewHolder holder, int position) {
final BureauRateObject br = itemList.get(position);
holder.bureauname.setText(br.getBureau_name());
holder.rates.setText(br.getBuysell());
final String BureauId = br.getBureau_id();
final String BureauName = br.getBureau_name();
final String BureauPhone = br.getBureau_phone();
final String BureauEmail = br.getBureau_email();
final String Website = br.getWebsite();
final String Branches = br.getBranches();
final String BureauProfile = br.getBureau_profile();
final String BureauLogo = br.getBureau_logo();
final String BureauPhoto = br.getBureau_photo();
final String currency = br.getBuysell();
final String BuySell = "Buying";
final String BuySell_two ="Selling";
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(CurrencySelectorAdapter.this.context, SingleForexDetails.class);
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("bureau_id", BureauId);
i.putExtra("bureau_name",BureauName);
i.putExtra("bureau_phone",BureauPhone);
i.putExtra("bureau_email",BureauEmail);
i.putExtra("website",Website);
i.putExtra("branches",Branches);
i.putExtra("bureau_profile",BureauProfile);
i.putExtra("bureau_logo",BureauLogo);
i.putExtra("bureau_photo",BureauPhoto);
i.putExtra("currency",currency);
i.putExtra("Buying",BuySell);
i.putExtra("Selling",BuySell_two);
context.startActivity(i);
}
});
}
尝试这个
BureauRateListing extends Activity{
public String bs;
private Intent i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rate_recycler_view);
raterv = (RecyclerView) findViewById(R.id.raterv_rv);
i = getIntent();
bs = i.getStringExtra("buysell");
}
public string getbs(){
return bs;
}
}
CurrencySelectorAdapter extends ...{
BureauRateListing mBureauRateListing; // it's Activity
CurrencySelectorAdapter (Activity activity){
mBureauRateListing =activity;
}
.
.
.
@Override
public void onBindViewHolder(CurrencyViewHolder holder, int position) {
String bs = mBureauRateListing.getbs();
.
.
.
}
在适配器类中传递活动。
使用此语法访问适配器中的bs变量。
BureauRateListing extends Activity{
public String bs;
private Intent i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rate_recycler_view);
CurrencySelectorAdapter currencySelectorAdapter=new (BureauRateListing.this);
raterv = (RecyclerView) findViewById(R.id.raterv_rv);
i = getIntent();
bs = i.getStringExtra("buysell");
}}
CurrencySelectorAdapter extends ...{
Activity mBureauRateListing; // it's Activity
CurrencySelectorAdapter (Activity activity){
mBureauRateListing =activity;
}
@Override
public void onBindViewHolder(CurrencyViewHolder holder, int position) {
String bsFromActivity = ((BureauRateListing)mBureauRateListing).bs;
}}
最好在BureauRateListing
活动本身中启动新活动。 避免使用适配器的startActivity
。 你可以创建一个View.OnClickListener
适配器成员,提供适配器同一个setter setOnClickListener
。 从您的活动中,您可以直接设置此侦听器。 adapter.setOnClikListener(this)
。 在activity中实现View.OnClickListener
,然后在onClick
启动新活动。
在您的适配器中添加
private View.OnClickListener mCLickListener;
还添加
public void setOnClickListener(View.OnClickListener listener){
mCLickListener = listener;
}
在onBindViewHolder中
holder.root.setOnClickListener(mCLickListener)
使您的BureauRateListingActivity
实现View.OnClickListener
然后,在BureauRateListingActivity
内部的onClick
方法
Intent i = new Intent(this, SingleForexDetails.class);
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("bureau_id", BureauId);
i.putExtra("bureau_name",BureauName);
i.putExtra("bureau_phone",BureauPhone);
i.putExtra("bureau_email",BureauEmail);
i.putExtra("website",Website);
i.putExtra("branches",Branches);
i.putExtra("bureau_profile",BureauProfile);
i.putExtra("bureau_logo",BureauLogo);
i.putExtra("bureau_photo",BureauPhoto);
i.putExtra("currency",currency);
i.putExtra("Buying",BuySell);
i.putExtra("Selling",BuySell_two);
startActivity(i);
最后,在BureauRateListingActivity
,在适配器adapter.setOnClikListener(this).
设置侦听器adapter.setOnClikListener(this).
在MainActivity.java中
public static String bs;
在RecycleViewAdapter.java中
import static <app path>.MainActivity.bs;
现在可以访问了。
在适配器的构造函数中,获取BureauRateListing.java类的实例并将其存储在成员变量中
BureauRateListing mAct;
public CurrencySelectorAdapter(BureauRateListing act){
this.mAct = act;
}
现在,您可以从CurrencySelectorAdapter类的任何方法中使用mAct访问BureauRateListing类的公共实例变量 。
例如
@Override
public void onBindViewHolder(CurrencyViewHolder holder, int position) {
String s = mAct.bs;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.