我是android新手,我有两个类,一个Activity类BureauRateListing.java
和一个Adapter类CurrencySelectorAdapter.java
。
所以我想将这个变量(public String bs;
)从Activity类访问到RecyclerView Adapter
方法中的onBindViewHolder()
类,下面是我的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 bs;
中的变量(Activity class
)访问onBindViewHolder()
方法中的Adapter类,并将其作为Extra发送到NextActivity。下面是我的onBindViewHolder()
方法,我想访问变量,我发送它作为额外:
@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();
.
.
.
}
最好在你的BureauRateListing
活动中开始新的活动。从适配器避免startActivity
。你可以在适配器中创建一个View.OnClickListener
成员,在适配器setOnClickListener
中提供相同的setter。从您的活动中,您可以直接设置此侦听器。 adapter.setOnClikListener(this)
。在活动中实施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中的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.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;
}
在MainActivity.java中
public static String bs;
在RecycleViewAdapter.java中
import static <app path>.MainActivity.bs;
现在它是可访问的。