Android ListView con desplazamiento rápido y índice de sección alfabética

¿Cómo agregar testview al tocar una letra en el panel del alfabeto derecho como se muestra en las imágenes? ¿Me podría ayudar? A continuación se muestra mi código.

En detalles, estoy buscando un ejemplo exactamente como la imagen de abajo. Actualmente hice la clasificación de datos. Cuando hago clic en el panel del alfabeto derecho, muestra los datos correctamente. Pero el problema es que al tocar una letra en el panel del alfabeto correcto, necesito mostrar qué letra está presionando en tamaño grande como se muestra en la imagen (E). ¿Cómo puedo hacerlo? ¿Podrías ayudarme? ¡Gracias de antemano!

// MainActivity.java
public class MainActivity extends Activity implements
                          SearchView.OnQueryTextListener,
                          SearchView.OnCloseListener {

    private IndexableListView listView;
    private SearchView search;
    EfficientAdapter objectAdapter;
    EfficientAdapter2 objectAdapter1;
    int textlength = 0;
    private CheckBox checkStat, checkRoutine, checkTat;
    private ArrayList<Patient> patientListArray;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.homempleb);
        Log.i("scan"," txtScanResult ");

        ActionItem nextItem = new ActionItem();
        final QuickAction quickAction = new QuickAction(this, QuickAction.VERTICAL);
        quickAction.addActionItem(nextItem);
        quickAction.setOnDismissListener(new QuickAction.OnDismissListener() {
            @Override
            public void onDismiss() {
                Toast.makeText(getApplicationContext(), "Dismissed", Toast.LENGTH_SHORT).show();
            }
        });

        listView = (IndexableListView) findViewById(R.id.homelistView);
        listView.setTextFilterEnabled(true);
        listView.setFastScrollEnabled(true);
        listView.setFastScrollAlwaysVisible(true);
        objectAdapter = new EfficientAdapter(this);
        listView.setAdapter(objectAdapter);
    }

    @Override
    public boolean onClose() {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        return false;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }
}

...

// EfficientAdapter.java
public class EfficientAdapter extends BaseAdapter implements SectionIndexer {

    private String mSections = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    ArrayList<Patient> patientListArray;
    private LayoutInflater mInflater;
    private Context context;

    public EfficientAdapter(Context context) {
        mInflater = LayoutInflater.from(context);
        this.context=context;
        String patientListJson = CountriesList.jsonData;
        JSONObject jssson;
        try {
            jssson = new JSONObject(patientListJson);
            patientListJson = jssson.getString("PostPatientDetailResult");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Gson gson = new Gson();
        JsonParser parser = new JsonParser();
        JsonArray Jarray = parser.parse(patientListJson).getAsJsonArray();
        patientListArray = new ArrayList<Patient>();
        for (JsonElement obj : Jarray) {
            Patient patientList = gson.fromJson(obj, Patient.class);
            patientListArray.add(patientList);
            Collections.sort(patientListArray, new Comparator<Object>() {
                @Override
                public int compare(Object o1, Object o2) {
                     Patient p1 = (Patient) o1;
                     Patient p2 = (Patient) o2;
                    return p1.getName().compareToIgnoreCase(p2.getName());
                }
            });
        }
    }


    public int getCount() {
        return patientListArray.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.homemplebrowview, null);
            holder = new ViewHolder();
            holder.text1 = (TextView) convertView.findViewById(R.id.name);
            holder.text2 = (TextView) convertView.findViewById(R.id.mrn);
            holder.text3 = (TextView) convertView.findViewById(R.id.date);
            holder.text4 = (TextView) convertView.findViewById(R.id.age);
            holder.text5 = (TextView) convertView.findViewById(R.id.gender);
            holder.text6 = (TextView) convertView.findViewById(R.id.wardno);
            holder.text7 = (TextView) convertView.findViewById(R.id.roomno);
            holder.text8 = (TextView) convertView.findViewById(R.id.bedno);
            holder.btnList = (Button) convertView.findViewById(R.id.listbutton);
            holder.btnList.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Intent next=new Intent(context, SeviceDetails.class);
                    // context.startActivity(next);
                }
            });
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.text1.setText(Util.formatN2H(patientListArray.get(position).getName()));
        holder.text2.setText(patientListArray.get(position).getMrnNumber());
        holder.text3.setText(Util.formatN2H(patientListArray.get(position).getRoom()));
        holder.text4.setText(Util.formatN2H(patientListArray.get(position).getAge()));
        holder.text5.setText(Util.formatN2H( patientListArray.get(position).getGender()));
        holder.text6.setText(Util.formatN2H(patientListArray.get(position).getWard()));
        holder.text7.setText(Util.formatN2H(patientListArray.get(position).getRoom()));
        holder.text8.setText(Util.formatN2H(patientListArray.get(position).getBed()));
        return convertView;
    }

    static class ViewHolder {
        public Button btnList;
        public TextView text8;
        public TextView text7;
        public TextView text6;
        public TextView text5;
        public TextView text4;
        public TextView text1;
        public TextView text2;
        public TextView text3;
    }

    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }

    //@Override
    public int getPositionForSection(int section) {
        // If there is no item for current section, previous section will be selected
        for (int i = section; i >= 0; i--) {
            for (int j = 0; j < getCount(); j++) {
                if (i == 0) {
                    // For numeric section
                    for (int k = 0; k <= 9; k++) {
                        if (StringMatcher.match(String.valueOf(patientListArray.get(j).getName().charAt(0)), String.valueOf(k)))
                            return j;
                    }
                } else {
                    if (StringMatcher.match(String.valueOf(patientListArray.get(j).getName().charAt(0)),
                                            String.valueOf(mSections.charAt(i))))
                        return j;
                }
            }
        }
        return 0;
    }

    //@Override
        public int getSectionForPosition(int position) {
        return 0;
    }

    //@Override
    public Object[] getSections() {
        String[] sections = new String[mSections.length()];
        for (int i = 0; i < mSections.length(); i++)
            sections[i] = String.valueOf(mSections.charAt(i));
        return sections;
    }

}

Respuestas a la pregunta(6)

Su respuesta a la pregunta