Advertisement
Guest User

Untitled

a guest
Jul 4th, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.14 KB | None | 0 0
  1. package com.mukesh.aphabaticalview;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.view.View;
  7. import android.view.ViewTreeObserver;
  8. import android.widget.AbsListView;
  9. import android.widget.AdapterView;
  10. import android.widget.ArrayAdapter;
  11. import android.widget.ListView;
  12.  
  13. import java.lang.reflect.Field;
  14. import java.lang.reflect.Method;
  15. import java.util.ArrayList;
  16. import java.util.Arrays;
  17.  
  18. public class Alphbatical extends Activity {
  19. private ListView countryList;
  20. ListView sideList;
  21. boolean isReady = false, mainTouched, sideTouched;
  22.  
  23. AbsListView.OnScrollListener mainListener, sideListener, slaveListener;
  24.  
  25. @Override
  26. public void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.home);
  29.  
  30. sideList = (ListView) findViewById(R.id.sideIndex);
  31. countryList = (ListView) findViewById(R.id.list);
  32.  
  33. //TODO
  34. addGlobalLayoutListener();
  35. }
  36.  
  37. private void addGlobalLayoutListener() {
  38. findViewById(R.id.main).getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
  39. @Override
  40. public void onGlobalLayout() {
  41. if (isReady)
  42. return;
  43. isReady = true;
  44. setEverything();
  45. }
  46. });
  47. }
  48.  
  49. private void setEverything() {
  50. setMainListView();
  51. setSideListView();
  52. }
  53.  
  54. //TODO
  55. private void stopScroll(AbsListView view) {
  56. try {
  57. Field field = android.widget.AbsListView.class.getDeclaredField("mFlingRunnable");
  58. field.setAccessible(true);
  59. Object flingRunnable = field.get(view);
  60. if (flingRunnable != null) {
  61. Method method = Class.forName("android.widget.AbsListView$FlingRunnable").getDeclaredMethod("endFling");
  62. method.setAccessible(true);
  63. method.invoke(flingRunnable);
  64. }
  65. } catch (Exception ignored) {
  66. }
  67. }
  68.  
  69. private void setMainListView() {
  70. // TODO ADAPTER
  71. View v = new View(getApplicationContext());
  72. int height = countryList.getHeight();
  73. v.setLayoutParams(new AbsListView.LayoutParams(10, height));
  74. countryList.addFooterView(v, null, false);
  75. AllDataAdapter adapter = new AllDataAdapter(getApplicationContext(), R.layout.home_list, Whatever.getData());
  76. countryList.setAdapter(adapter);
  77.  
  78. // TODO SCROLL LISTENER
  79.  
  80. mainListener = new AbsListView.OnScrollListener() {
  81. @Override
  82. public void onScrollStateChanged(AbsListView absListView, int i) {
  83. switch (i) {
  84. case SCROLL_STATE_TOUCH_SCROLL:
  85. mainTouched = true;
  86. break;
  87. case SCROLL_STATE_IDLE:
  88. mainTouched = false;
  89. sideList.setOnScrollListener(sideListener);
  90. break;
  91. }
  92. }
  93.  
  94. @Override
  95. public void onScroll(AbsListView absListView, int first, int visible, int all) {
  96. if (first == all - 1) {
  97. countryList.setSelection(first - 1);
  98. stopScroll(countryList);
  99. return;
  100. }
  101.  
  102. if (mainTouched) {
  103. String character = ((Data) (countryList.getAdapter().getItem(countryList.getFirstVisiblePosition()))).title.substring(0, 1);
  104. for (int i = 0; i < sideList.getAdapter().getCount(); i++) {
  105. if ((sideList.getAdapter().getItem(i)).equals(character)) {
  106.  
  107. smoothScrollToPositionFromTop(sideList, i);
  108. break;
  109. }
  110. }
  111. }
  112. }
  113. };
  114.  
  115. countryList.setOnScrollListener(mainListener);
  116. }
  117.  
  118. private void setSideListView() {
  119. final String[] alphabaticalList = {"All", "A", "B", "C", "D", "E",
  120. "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q",
  121. "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
  122. ArrayAdapter<String> alphabaticalListAdapter = new ArrayAdapter<String>(
  123. this, android.R.layout.simple_list_item_1, Arrays.asList(alphabaticalList));
  124.  
  125. View v = new View(getApplicationContext());
  126. int height = sideList.getHeight();
  127. v.setLayoutParams(new AbsListView.LayoutParams(10, height));
  128. sideList.addFooterView(v, null, false);
  129.  
  130. sideList.setAdapter(alphabaticalListAdapter);
  131.  
  132. sideListener = new AbsListView.OnScrollListener() {
  133. @Override
  134. public void onScrollStateChanged(AbsListView absListView, int i) {
  135. switch (i) {
  136. case SCROLL_STATE_TOUCH_SCROLL:
  137. sideTouched = true;
  138. break;
  139. case SCROLL_STATE_IDLE:
  140. countryList.setOnScrollListener(mainListener);
  141. sideTouched = false;
  142. break;
  143. }
  144. }
  145.  
  146. @Override
  147. public void onScroll(AbsListView absListView, int first, int visible, int all) {
  148. if (first == all - 1) {
  149. sideList.setSelection(first - 1);
  150. sideList.scrollBy(0, 0);
  151. stopScroll(sideList);
  152. return;
  153. }
  154. if (sideTouched) {
  155. String character = ((String) absListView.getAdapter().getItem(first)).substring(0, 1);
  156. for (int i = 0; i < countryList.getAdapter().getCount() - 1; i++) {
  157. if (((Data) countryList.getAdapter().getItem(i)).title.substring(0, 1).equals(character)) {
  158. smoothScrollToPositionFromTop(countryList, i);
  159. break;
  160. }
  161. }
  162. }
  163. }
  164. };
  165. sideList.setOnScrollListener(sideListener);
  166. }
  167.  
  168. public void smoothScrollToPositionFromTop(final AbsListView view, final int position) {
  169. View child = getChildAtPosition(view, position);
  170.  
  171. if ((child != null) && ((child.getTop() == 0) || ((child.getTop() > 0) && !view.canScrollVertically(1)))) {
  172. return;
  173. }
  174. if (position < view.getFirstVisiblePosition()) {
  175. final int value = (position - view.getFirstVisiblePosition()) * view.getAdapter().getView(view.getFirstVisiblePosition(), null, view).getHeight();
  176. view.smoothScrollToPosition(value);
  177. }
  178. // else {
  179.  
  180. view.setOnScrollListener(new AbsListView.OnScrollListener() {
  181. @Override
  182. public void onScrollStateChanged(final AbsListView view, final int scrollState) {
  183. if (scrollState == SCROLL_STATE_IDLE) {
  184. view.setOnScrollListener(null);
  185.  
  186. new Handler().post(new Runnable() {
  187. @Override
  188. public void run() {
  189. view.setSelection(position);
  190. }
  191. });
  192. }
  193. }
  194.  
  195. @Override
  196. public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount,final int totalItemCount) {}
  197. });
  198.  
  199. new Handler().post(new Runnable() {
  200. @Override
  201. public void run() {
  202. view.smoothScrollToPositionFromTop(position, 0);
  203. }
  204. });
  205. // }
  206. }
  207.  
  208. public static View getChildAtPosition(final AdapterView view, final int position) {
  209. final int index = position - view.getFirstVisiblePosition();
  210. if ((index >= 0) && (index < view.getChildCount())) {
  211. return view.getChildAt(index);
  212. } else {
  213. return null;
  214. }
  215. }
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement