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