如何从 RecyclerAdapter 获取数据?
how can I get data from RecyclerAdapter?
我有 RecyclerView 和 RecyclerAdapter,带有两个 ArrayList<String>ingridientsfinal
和 ArrayList<String> dependingridients
ArrayLists 和一个 Switch mySwitch
。
下面的适配器。
public class recyclerAdapterIngridients extends RecyclerView.Adapter<recyclerAdapterIngridients.myViewHolder>{
Context context;
int intege;
String[] glux;
public static ArrayList<String> ingridientsfinal;
public static ArrayList<String> dependingridients;
public static class myViewHolder extends RecyclerView.ViewHolder{
@SuppressLint("UseSwitchCompatOrMaterialCode")
Switch mySwitch;
TextView ingridtitle, avel;
public myViewHolder(@NonNull View itemView) {
super(itemView);
ingridtitle=itemView.findViewById(R.id.ingridientTemple);
mySwitch=itemView.findViewById(R.id.switch1);
avel=itemView.findViewById(R.id.depend);
mySwitch.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View view) {
if(!mySwitch.isChecked()){
mySwitch.setChecked(false);
for (int i=0; i<dependingridients.size(); i++){
if(getAdapterPosition()==i) {
String h = orderPlain.priceView.getText().toString();
h=h.replace(h.substring(h.length()-1), "");
String L = avel.getText().toString();
L=L.replace(L.substring(L.length()-1), "");
orderPlain.priceView.setText(Integer.parseInt(h)
-Integer.parseInt(L)+"$");
}
}
}else{
mySwitch.setChecked(true);
for (int i=0; i<dependingridients.size(); i++){
if(getAdapterPosition()==i) {
String h = orderPlain.priceView.getText().toString();
h=h.replace(h.substring(h.length()-1), "");
String L = avel.getText().toString();
L=L.replace(L.substring(L.length()-1), "");
orderPlain.priceView.setText(Integer.parseInt(h)
+Integer.parseInt(L)+"$");
}
}
}
}
});
}
}
public recyclerAdapterIngridients(ArrayList<String> list, Context c, @Nullable String[] list2){
context=c;
ingridientsfinal=list;
if(list2!=null) {
glux = list2;
dependingridients = new ArrayList<String>(Arrays.asList(list2));
}else{
glux=null;
dependingridients = new ArrayList<>(0);
}
}
@NonNull
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.temple, parent, false );
return new myViewHolder(view);
}
@SuppressLint("SetTextI18n")
public void onBindViewHolder(@NonNull myViewHolder holder, int position) {
if(glux!=null){
try {
if(position==dependingridients.size())
holder.mySwitch.setEnabled(false);
String a = ingridientsfinal.get(position-dependingridients.size());
holder.ingridtitle.setText(a);
}catch (IndexOutOfBoundsException ignored){}
try {
String b = dependingridients.get(position);
holder.ingridtitle.setText(b);
holder.mySwitch.setChecked(false);
String g = b.replace(b,"1$");
holder.avel.setText(g);
}catch (IndexOutOfBoundsException ignored){}
}else {
if(position==0)
holder.mySwitch.setEnabled(false);
String a = ingridientsfinal.get(position);
holder.ingridtitle.setText(a);
}
}
@Override
public int getItemCount() {
if(dependingridients!=null) {
return dependingridients.size() + ingridientsfinal.size();
}else {
return ingridientsfinal.size();
}
}
}
我想获取从另一个 class 切换的开关的位置。有人可以建议我该怎么做吗?谢谢)
您应该使用接口在适配器和 Activity/Fragment
之间设置一个 communication
在您的适配器中:
public interface onclickListener{
void onClick();
}
然后在您的适配器 class 中创建它的变量并通过 constructor
传递到 adapter class
并在 Activity/Fragment
中使用它
好的,我找到了解决方法。我刚刚创建了新的 public static ArrayList<String> finall = new ArrayList<>();
然后我刚刚获得位置并将 TextView 的值添加到我的 ArrayList。然后我就可以从另一个 class.
得到那个 ArrayList
public myViewHolder(@NonNull View itemView) {
super(itemView);
ingridtitle=itemView.findViewById(R.id.ingridientTemple);
mySwitch=itemView.findViewById(R.id.switch1);
avel=itemView.findViewById(R.id.depend);
mySwitch.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View view) {
if(!mySwitch.isChecked()){
mySwitch.setChecked(false);
for (int i=0; i<dependingridients.size(); i++){
if(getAdapterPosition()==i) {
String h = orderPlain.priceView.getText().toString();
h=h.replace(h.substring(h.length()-1), "");
String L = avel.getText().toString();
L=L.replace(L.substring(L.length()-1), "");
orderPlain.priceView.setText(Integer.parseInt(h)
-Integer.parseInt(L)+"$");
finall.remove(dependingridients.get(i));
System.out.println(finall);
}
}
}else{
mySwitch.setChecked(true);
for (int i=0; i<dependingridients.size(); i++){
if(getAdapterPosition()==i) {
String h = orderPlain.priceView.getText().toString();
h=h.replace(h.substring(h.length()-1), "");
String L = avel.getText().toString();
L=L.replace(L.substring(L.length()-1), "");
orderPlain.priceView.setText(Integer.parseInt(h)
+Integer.parseInt(L)+"$");
String p = dependingridients.get(i);
System.out.println(p);
finall.add(p);
System.out.println(finall);
}
}
}
}
});
}
我有 RecyclerView 和 RecyclerAdapter,带有两个 ArrayList<String>ingridientsfinal
和 ArrayList<String> dependingridients
ArrayLists 和一个 Switch mySwitch
。
下面的适配器。
public class recyclerAdapterIngridients extends RecyclerView.Adapter<recyclerAdapterIngridients.myViewHolder>{
Context context;
int intege;
String[] glux;
public static ArrayList<String> ingridientsfinal;
public static ArrayList<String> dependingridients;
public static class myViewHolder extends RecyclerView.ViewHolder{
@SuppressLint("UseSwitchCompatOrMaterialCode")
Switch mySwitch;
TextView ingridtitle, avel;
public myViewHolder(@NonNull View itemView) {
super(itemView);
ingridtitle=itemView.findViewById(R.id.ingridientTemple);
mySwitch=itemView.findViewById(R.id.switch1);
avel=itemView.findViewById(R.id.depend);
mySwitch.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View view) {
if(!mySwitch.isChecked()){
mySwitch.setChecked(false);
for (int i=0; i<dependingridients.size(); i++){
if(getAdapterPosition()==i) {
String h = orderPlain.priceView.getText().toString();
h=h.replace(h.substring(h.length()-1), "");
String L = avel.getText().toString();
L=L.replace(L.substring(L.length()-1), "");
orderPlain.priceView.setText(Integer.parseInt(h)
-Integer.parseInt(L)+"$");
}
}
}else{
mySwitch.setChecked(true);
for (int i=0; i<dependingridients.size(); i++){
if(getAdapterPosition()==i) {
String h = orderPlain.priceView.getText().toString();
h=h.replace(h.substring(h.length()-1), "");
String L = avel.getText().toString();
L=L.replace(L.substring(L.length()-1), "");
orderPlain.priceView.setText(Integer.parseInt(h)
+Integer.parseInt(L)+"$");
}
}
}
}
});
}
}
public recyclerAdapterIngridients(ArrayList<String> list, Context c, @Nullable String[] list2){
context=c;
ingridientsfinal=list;
if(list2!=null) {
glux = list2;
dependingridients = new ArrayList<String>(Arrays.asList(list2));
}else{
glux=null;
dependingridients = new ArrayList<>(0);
}
}
@NonNull
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.temple, parent, false );
return new myViewHolder(view);
}
@SuppressLint("SetTextI18n")
public void onBindViewHolder(@NonNull myViewHolder holder, int position) {
if(glux!=null){
try {
if(position==dependingridients.size())
holder.mySwitch.setEnabled(false);
String a = ingridientsfinal.get(position-dependingridients.size());
holder.ingridtitle.setText(a);
}catch (IndexOutOfBoundsException ignored){}
try {
String b = dependingridients.get(position);
holder.ingridtitle.setText(b);
holder.mySwitch.setChecked(false);
String g = b.replace(b,"1$");
holder.avel.setText(g);
}catch (IndexOutOfBoundsException ignored){}
}else {
if(position==0)
holder.mySwitch.setEnabled(false);
String a = ingridientsfinal.get(position);
holder.ingridtitle.setText(a);
}
}
@Override
public int getItemCount() {
if(dependingridients!=null) {
return dependingridients.size() + ingridientsfinal.size();
}else {
return ingridientsfinal.size();
}
}
}
我想获取从另一个 class 切换的开关的位置。有人可以建议我该怎么做吗?谢谢)
您应该使用接口在适配器和 Activity/Fragment
communication
在您的适配器中:
public interface onclickListener{
void onClick();
}
然后在您的适配器 class 中创建它的变量并通过 constructor
传递到 adapter class
并在 Activity/Fragment
好的,我找到了解决方法。我刚刚创建了新的 public static ArrayList<String> finall = new ArrayList<>();
然后我刚刚获得位置并将 TextView 的值添加到我的 ArrayList。然后我就可以从另一个 class.
public myViewHolder(@NonNull View itemView) {
super(itemView);
ingridtitle=itemView.findViewById(R.id.ingridientTemple);
mySwitch=itemView.findViewById(R.id.switch1);
avel=itemView.findViewById(R.id.depend);
mySwitch.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View view) {
if(!mySwitch.isChecked()){
mySwitch.setChecked(false);
for (int i=0; i<dependingridients.size(); i++){
if(getAdapterPosition()==i) {
String h = orderPlain.priceView.getText().toString();
h=h.replace(h.substring(h.length()-1), "");
String L = avel.getText().toString();
L=L.replace(L.substring(L.length()-1), "");
orderPlain.priceView.setText(Integer.parseInt(h)
-Integer.parseInt(L)+"$");
finall.remove(dependingridients.get(i));
System.out.println(finall);
}
}
}else{
mySwitch.setChecked(true);
for (int i=0; i<dependingridients.size(); i++){
if(getAdapterPosition()==i) {
String h = orderPlain.priceView.getText().toString();
h=h.replace(h.substring(h.length()-1), "");
String L = avel.getText().toString();
L=L.replace(L.substring(L.length()-1), "");
orderPlain.priceView.setText(Integer.parseInt(h)
+Integer.parseInt(L)+"$");
String p = dependingridients.get(i);
System.out.println(p);
finall.add(p);
System.out.println(finall);
}
}
}
}
});
}