Android ListView with fast scroll and alphabetical section index

匿名 (未验证) 提交于 2019-12-03 00:59:01

问题:

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.

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!

// 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 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 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();         for (JsonElement obj : Jarray) {             Patient patientList = gson.fromJson(obj, Patient.class);             patientListArray.add(patientList);             Collections.sort(patientListArray, new Comparator() {                 @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 

回答1:

You might want to check this out:

https://github.com/andraskindler/quickscroll

This is a library project I created, because I had to use this scrolling pattern in a few recent apps, so I thought others might be interested in it. It's fairly easy to use, see readme in the github link above.



回答2:

Hear is one cool example of what you need https://github.com/woozzu/IndexableListView

IN order to compile the project and get rid of korean text update the StringMatcher class

package com.woozzu.android.util;  public class StringMatcher {     public static boolean match(String value, String keyword) {         if (value == null || keyword == null)             return false;         if (keyword.length() > value.length())             return false;          int i = 0, j = 0;         do {             int vi = value.charAt(i);             int kj = keyword.charAt(j);             if (isKorean(vi) && isInitialSound(kj)) {             } else {                 if (vi == kj) {                     i++;                     j++;                 } else if (j > 0)                     break;                 else                     i++;             }         } while (i 


回答3:

Try this,

http://files.cnblogs.com/anee/MyContact20121102123333_last.rar

This is working for me. this is better way to implement the section indexer.

Please prefer this GIT to get more Example of SectionIndexer



回答4:

Hear is one good example of what you looking for https://github.com/woozzu/IndexableListView



回答5:

If you want to show the alphabet clicked as a Toast (a custom toast like the one shown in the image) use this:

view.setOnClickListener(new View.OnClickListener() {     public void onClick(View v) {         LayoutInflater inflater = getLayoutInflater();         View layout = inflater.inflate(R.layout.toast_custom_layout,         (ViewGroup) findViewById(R.id.toast_layout_root));         Toast toast = new Toast(getApplicationContext());         toast.setGravity(Gravity.BOTTOM, 0, 0);         // to position the Toast on the screen         toast.setDuration(Toast.LENGTH_LONG);         // to set the duration, the toast should appear         toast.setView(layout);         // a custom layout for the toast         toast.show();     } }); 

and your toast_custom_layout.xml will be a 100 x 100 layout with large text size



回答6:

Just try https://github.com/andraskindler/quickscroll

It's working good and by a tweak you can use it with GridView.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!