¿Es posible tener una mezcla de ambos String y SpannableString en un ArrayList sin agregar cargas de código?

public class MyFragment extends android.support.v4.app.Fragment {
    public MyFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_rv, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        View v = getView();
        assert v != null;

        recyclerView = v.findViewById(R.id.my_recyclerview);

        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));

        // SpannableStrings
        SpannableStringBuilder ssb = new SpannableStringBuilder();

        SpannableString str1 = new SpannableString(" Hello World ");
        str1.setSpan(new BackgroundColorSpan(Color.BLACK), 0, str1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        str1.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.circle)), 0, str1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        ssb.append(str1);

        SpannableString str2 = new SpannableString(" Bonjour le monde");
        str2.setSpan(new ForegroundColorSpan(Color.BLACK), 0, str2.length(), 0);
        ssb.append(str2);

        data = new ArrayList<>();
        data.add(ssb);
        data.add(getString(R.string.section_b));
        data.add(getString(R.string.section_c));

        subdata = new ArrayList<>();
        subdata.add("Item A1");
        subdata.add("Item B1\nItem B2");
        subdata.add("Item C1\nItem C2\nItem C3");


        adapter = createAdapter();

        recyclerView.setAdapter(adapter);

        super.onActivityCreated(savedInstanceState);
    }

    RecyclerView recyclerView;
    ArrayList<Spannable> data;
    ArrayList<String> subdata;
    RecyclerView.Adapter<ViewHolder> adapter;
}
1
MacaronLover 14 sep. 2018 a las 00:41

3 respuestas

La mejor respuesta

Tanto String como SpanableString implementan CharSequence. Si no necesita datos que CharSequence no puede proporcionarle, simplemente puede usarlos.

data = new ArrayList<CharSequence>();
2
rexar5 13 sep. 2018 a las 21:47

No puede colocar las dos cadenas en el mismo índice en una matriz, pero use hash_map para eso, puede obtener el mismo resultado que desee. siga esto esto, espero que esto podría ayudar.

0
user7505104user7505104 13 sep. 2018 a las 21:47

La forma más sencilla de lograrlo sería crear

ArrayList<Object> data = new ArrayList<>();

Luego puede agregar cualquier objeto a la lista de Array Espero que esto ayude :)

0
Deepan 13 sep. 2018 a las 21:54