Comment ajouter testview en touchant une lettre sur le panneau de droite de l'alphabet, comme indiqué sur les images? Pourriez-vous m'aider, s'il vous plaît? Ci-dessous mon code.
En détail, je cherche un exemple exactement comme ci-dessous image. Actuellement, j'ai fait le tri des données. Lorsque je clique sur le panneau de droite de l'alphabet, les données sont correctement affichées. Mais le problème est que lorsque vous touchez une lettre, le panneau de droite de l’alphabet doit montrer quelle lettre il appuie en gros format, comme indiqué dans l’image (E). Comment puis-je le faire, pourriez-vous m'aider s'il vous plaît? Merci d'avance!
// 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;
}
}
Vous voudrez peut-être vérifier ceci:
https://github.com/andraskindler/quickscroll
C'est un projet de bibliothèque que j'ai créé, parce que je devais utiliser ce motif de défilement dans quelques applications récentes, j'ai donc pensé que d'autres pourraient s'y intéresser. C'est assez facile à utiliser, voir le readme dans le lien github ci-dessus.
Hear est un bon exemple de ce dont vous avez besoin https://github.com/woozzu/IndexableListView
Pour compiler le projet et se débarrasser du texte coréen, mettez à jour la classe StringMatcher
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 < value.length() && j < keyword.length());
return (j == keyword.length())? true : false;
}
private static boolean isKorean(int i) {
return false;
}
private static boolean isInitialSound(int i) {
return false;
}
}
Essaye ça,
_ { http://files.cnblogs.com/anee/MyContact20121102123333_last.rar } _
Cela fonctionne pour moi. c'est une meilleure façon de mettre en œuvre le indexeur de section .
S'il vous plaît préférez ce GIT pour obtenir plus de Example of SectionIndexer
Si vous souhaitez afficher l'alphabet cliqué sous forme de pain grillé (un pain grillé personnalisé comme celui montré dans l'image), utilisez ceci:
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();
}
});
et votre toast_custom_layout.xml
sera une mise en page de 100 x 100 avec une grande taille de texte
Il suffit d’essayer https://github.com/andraskindler/quickscroll
Cela fonctionne bien et avec un Tweak, vous pouvez l'utiliser avec GridView.
Hear est un bon exemple de ce que vous recherchez https://github.com/woozzu/IndexableListView