In the child view, I want suitable single items to be displayed, but it is showing all the required items in all the occurring child view's! how to solve this? see this pic for clarity
and this my code for setting Titles(Parent Item) based on keys and also setting descriptions(Child items) based on keys received
Map<String, String> getdes(int keyId,int valId){
String[] key = getResources().getStringArray(keyId);
String[] des = getResources().getStringArray(valId);
Map<String, String> dict = new HashMap<String,String>();
for (int i=0, l=des.length; i<l; i++){
dict.put(key[i],des[i]);
}
return dict;
}
//this for titles
Map<String, String> getDict(int keyId, int valId) {
String[] keys = getResources().getStringArray(keyId);
String[] vals = getResources().getStringArray(valId);
Map<String, String> dict = new HashMap<String, String>();
for (int i = 0, l = keys.length; i < l; i++) {
dict.put(keys[i], vals[i]);
}
return dict;
}
private void dataOk(String res) {
FaultTitle title;
FaultDesc d1; /*= new FaultDesc("ghj");*/
Map<String, String> dtcVals = getDict(R.array.dtc_keys, R.array.dtc_values);
Map<String , String> dtcdes = getdes(R.array.dtc_keys,R.array.dtc_descrip);
if (res != null) {
for (String dtcCode : res.split("\n")) {
d1 = new FaultDesc(dtcCode, dtcdes.get(dtcCode));
des.add(d1);
Log.d("Trouble codes", dtcCode + " : " + dtcVals.get(dtcCode)+ ": "+ numberFaults);
title = new FaultTitle(dtcCode,dtcVals.get(dtcCode), des);
titles.add(title);
Log.d("TEST", titles.get(numberFaults).getFaultCode() + " -- "+ titles.get(numberFaults).getFaultTitle());
numberFaults++;
}
fault_counter.setText(numberFaults+"");
mAdapter = new FaultAdapter(getContext(),titles);
recyclerViewFaults.setAdapter(mAdapter);
} else {
//TODO NO FAULTS
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
remoteDevice = prefs.getString(ConfigActivity.BLUETOOTH_LIST_KEY, null);
if (remoteDevice == null || "".equals(remoteDevice)) {
Log.e(TAG, "No Bluetooth device has been selected.");
mHandler.obtainMessage(NO_BLUETOOTH_DEVICE_SELECTED).sendToTarget();
} else {
gtct = new GetTroubleCodesTask();
gtct.execute(remoteDevice);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
final View view = inflater.inflate(R.layout.fragment_faults, container, false);
recyclerViewFaults = (RecyclerView) view.findViewById(R.id.recyclerviewFaults);
fault_counter = (TextView) view.findViewById(R.id.fault_counter);
mAdapter = new FaultAdapter(view.getContext(),titles);
recyclerViewFaults.setAdapter(mAdapter);
recyclerViewFaults.setLayoutManager(new LinearLayoutManager(view.getContext()));
return view;
}
This is Adapter class :
public class FaultAdapter extends ExpandableRecyclerAdapter<FaultTitleViewHolder,FaultDescViewHolder> {
private LayoutInflater mInflator;
private List<FaultTitle> mTitleList;
private List<FaultDesc> mChildList;
public FaultAdapter(Context context, @NonNull List<FaultTitle> parentItemList) {
super(parentItemList);
mTitleList = parentItemList;
mInflator = LayoutInflater.from(context);
}
@Override
public FaultTitleViewHolder onCreateParentViewHolder(@NonNull ViewGroup parentViewGroup) {
View movieCategoryView = mInflator.inflate(R.layout.view_fault_title, parentViewGroup, false);
return new FaultTitleViewHolder(movieCategoryView);
}
@Override
public FaultDescViewHolder onCreateChildViewHolder(@NonNull ViewGroup childViewGroup) {
View moviesView = mInflator.inflate(R.layout.view_fault_desc, childViewGroup, false);
return new FaultDescViewHolder(moviesView);
}
@Override
public void onBindParentViewHolder(FaultTitleViewHolder faultTitleViewHolder, int position, @NonNull ParentListItem parentListItem) {
FaultTitle faultTitle = (FaultTitle) parentListItem;
faultTitleViewHolder.bind(faultTitle);
}
@Override
public void onBindChildViewHolder(FaultDescViewHolder faultDescViewHolder, int position, @NonNull Object childListItem) {
FaultDesc faultDesc = (FaultDesc) childListItem;
faultDescViewHolder.bind(faultDesc);
}
}
This is getter class of Titles(Parent Items) and and Description(Child Items)
public class FaultTitle implements ParentListItem{
private String mFaultCode, mFaultTitle;
private List<FaultDesc> mFaultDesc;
public FaultTitle(String mFaultCode, String mFaultTitle, List<FaultDesc> mFaultDesc) {
this.mFaultCode = mFaultCode;
this.mFaultTitle = mFaultTitle;
this.mFaultDesc = mFaultDesc;
}
public String getFaultCode() {
return mFaultCode;
}
public String getFaultTitle() {
return mFaultTitle;
}
@Override
public List<FaultDesc> getChildItemList() {
return mFaultDesc;
}
public List<FaultDesc> getmFaultDesc() {
return mFaultDesc;
}
@Override
public boolean isInitiallyExpanded() {
return false;
}
}
public class FaultDesc {
private String faultDesc, mFaultCode;
public FaultDesc(String dtccode, String faultDesc) {
this.faultDesc = faultDesc;
this.mFaultCode = dtccode;
}
public FaultDesc(String faultDesc) {
this.faultDesc = faultDesc;
}
public String getFaultDesc() {
return faultDesc;
}
public String getmFaultCode() {
return mFaultCode;
}
}
this my arrays I'm using:
<string-array name="dtc_descrip">
<item>Wiring, regulator control solenoid. </item>
<item>Wiring, regulator control solenoid. </item>
<item>Wiring short to earth, regulator control solenoid. </item>
<item>Wiring open circuit/short to positive, regulator control solenoid. </item>
<item>Wiring open circuit, fuel shut -off valve. </item>
</string-array>
<string-array name="dtc_keys">
<item>P0001</item>
<item>P0002</item>
<item>P0003</item>
<item>P0004</item>
<item>P0005</item>
</string-array>
<string-array name="dtc_values">
<item>Fuel Volume Regulator Control Circuit/Open</item>
<item>Fuel Volume Regulator Control Circuit Range/Performance</item>
<item>Fuel Volume Regulator Control Circuit Low</item>
<item>Fuel Volume Regulator Control Circuit High</item>
<item>Fuel Shutoff Valve A Control Circuit/Open</item>
</string-array>