title: Android ListView with fast scroll and alphabetical section index
body: <p>How to add testview when touching a letter on right alphabet panel as shown in images?
  Could you please help me? Below is my code. </p>
  
  <p>In details, I am looking for an example exactly like below image. Currently I did the sorting of data. When I click on right alphabet panel it shows the data properly. But the problem is when touching a letter the right alphabet panel I need to show what letter he is pressing in large size shown in image(E). How can I do it, could you please help me? Thank you in advance!</p>
  
  <p><img src="https://i.stack.imgur.com/lFqiE.png" alt="screenshot of desired UI">   </p>
  
  <pre><code>// 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&lt;Patient&gt; 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;
      }
  }
  </code></pre>
  
  <p>...</p>
  
  <pre><code>// EfficientAdapter.java
  public class EfficientAdapter extends BaseAdapter implements SectionIndexer {
  
      private String mSections = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ";
      ArrayList&lt;Patient&gt; 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&lt;Patient&gt;();
          for (JsonElement obj : Jarray) {
              Patient patientList = gson.fromJson(obj, Patient.class);
              patientListArray.add(patientList);
              Collections.sort(patientListArray, new Comparator&lt;Object&gt;() {
                  @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 &gt;= 0; i--) {
              for (int j = 0; j &lt; getCount(); j++) {
                  if (i == 0) {
                      // For numeric section
                      for (int k = 0; k &lt;= 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 &lt; mSections.length(); i++)
              sections[i] = String.valueOf(mSections.charAt(i));
          return sections;
      }
  
  }
  </code></pre>