0

我有一个包含RecyclerView的底部工作表对话框片段,在RecyclerView适配器中我有要选择的项目列表,如果用户选择一个项目,片段中的TextView应该更改颜色和文本。从适配器更改视图android

适配器:

public class ServiceStaffAdapter extends RecyclerView.Adapter<ServiceStaffAdapter.ViewHolder> { 

List<StaffMoreStoreList> StaffMoreStoreItems; 
private Context context; 
private SharedPreferences spStore; 
private ArrayList<String> staffArray, initialsArray = new ArrayList<String>(); 
private View vDialogService; 
private String staffArrayString, staffIdString; 

public ServiceStaffAdapter(List<StaffMoreStoreList> StaffMoreStoreItems, Context context){ 
    super(); 
    this.StaffMoreStoreItems = StaffMoreStoreItems; 
    this.context = context; 
} 


@Override 
public ServiceStaffAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_staff_list, parent, false); 
    ServiceStaffAdapter.ViewHolder viewHolder = new ServiceStaffAdapter.ViewHolder(v); 

    SharedPreferences sp2= context.getSharedPreferences("STORE", Context.MODE_PRIVATE); 
    staffArrayString = sp2.getString("staffArray",""); 
    staffArray = new ArrayList<String>(); 

    if(staffArrayString.equals("")){ 
     staffArray = new ArrayList<String>(); 

    }else{ 
     String replace = staffArrayString.replace("[",""); 
     String replace1 = replace.replace("]",""); 
     List<String> arrayList = new ArrayList<String> (Arrays.asList(replace1.split(","))); 
     staffArray = new ArrayList<String>(); 
     for(String fav:arrayList){ 
      staffArray.add(String.valueOf(fav.trim())); 
     } 
    } 
    //array of string for staffs selected 
    return viewHolder; 
} 


@Override 
public void onBindViewHolder(final ServiceStaffAdapter.ViewHolder holder, int position) { 

    final StaffMoreStoreList staffMoreStoreList = StaffMoreStoreItems.get(position); 

    holder.tvStaffName.setText(staffMoreStoreList.getStaffName()); 


    StaffMoreStoreItems.get(position).getStaffId(); 
    Log.e("staffArray size", String.valueOf(staffArray.size())); 
    Log.e("staff array", staffArray.toString()); 
    staffIdString = staffMoreStoreList.getStaffId(); 
    //pre-select staffs  
    if(staffArray.contains(StaffMoreStoreItems.get(position).getStaffId())){ 
     holder.profile_image.setBorderColor(ContextCompat.getColor(context, R.color.primary)); 

    }else{ 
     holder.profile_image.setBorderColor(ContextCompat.getColor(context, R.color.transparent)); 
    } 

    holder.cardStaff.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(staffArray.contains(staffMoreStoreList.getStaffId())){ 
       holder.profile_image.setBorderColor(ContextCompat.getColor(context, R.color.transparent)); 
       staffArray.removeAll(Collections.singleton(staffMoreStoreList.getStaffId())); 

      }else{ 
       holder.profile_image.setBorderColor(ContextCompat.getColor(context, R.color.primary)); 
       staffArray.add(staffMoreStoreList.getStaffId()); 

      } 

      spStore = context.getSharedPreferences("STORE", Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor1 = spStore.edit(); 
      editor1.putString("staffArray", staffArray.toString());   
      editor1.commit(); 

     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return StaffMoreStoreItems.size(); 
} 

class ViewHolder extends RecyclerView.ViewHolder { 

    private TextView tvStaffName; 
    private CardView cardStaff; 
    private CircleImageView profile_image; 
    private ViewHolder(View itemView) { 
     super(itemView); 

     tvStaffName = (TextView) itemView.findViewById(R.id.tvStaffName); 
     cardStaff = (CardView) itemView.findViewById(R.id.cardStaff); 
     profile_image = (CircleImageView) itemView.findViewById(R.id.profile_image); 
    } 
    } 
} 

虽然在适配器CardViews我想在包含RecyclerView我的片段来改变一个TextView点击。 TextView将相应地改变staffArray的大小。

回答

0

将此内容复制到适配器中。创建一个接口来执行onClick。

public interface OnClickListner { 
void setOnItemClick(int postion, View view); 

}

然后创建你适配器OnClickListner onClickListner ;

然后创建一个setter public void setOnClickListner(OnClickListner onClickListner) { this.onClickListner = onClickListner ; }

在OnBind

holder.myview.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     onClickListner .setOnItemClick(position,view); 
    } 
}); 

那么现在

在你的碎片粘贴这些实例。

adapter.setOnClickListner(this); 

他们的错误会来,豪尔鼠标有它会问你的onclick实施, 实现方法和做任何你想要的片段做,

+0

感谢您的快速回复,我都跟着你的脚步但在最后一步,我无法解决适配器中的.setOnClickListner() – JerryKo

+0

方法,您必须为onclick创建一个setter。 adapter.yourSetterMethod(本); – xbadal