Wie zu verwenden onclick-button in baseAdapter
Wie zu verwenden, klicken Sie auf die Ereignis-Taste, um baseadapter.. habe viel versucht aber keine Verwendung.. In meinem Projekt gibt es custom listview, es enthält text,button(btnlist), fastscroll-index. wenn ich den onclick-button(btnlist) es ist nicht gng zu anderen Aktivität, kein Fehler wird auch angezeigt,kein toast..
Plz helfen mir, mit Beispiel . thank u im Voraus.
Quick ref: getview---> Halter.btnList.setOnClickListener
EfficientAdapter.java
public class EfficientAdapter extends BaseAdapter implements SectionIndexer, OnClickListener {
IndexableListView mListView;
private String mSections = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ArrayList<Patient> patientListArray;
private Intent intent;
private Patient patient;
private LayoutInflater mInflater;
private Context context;
private int positions;
ViewHolder holder;
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);
// Log.i("patientList", patientListJson);
}
}
public int getCount() {
return patientListArray.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
this.positions = position;
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.homemplebrowview, parent, false);
holder = new ViewHolder();
holder.text1 = (TextView) rowView.findViewById(R.id.name);
holder.text2 = (TextView) rowView.findViewById(R.id.mrn);
holder.text3 = (TextView) rowView.findViewById(R.id.date);
holder.text4 = (TextView) rowView.findViewById(R.id.age);
holder.text5 = (TextView) rowView.findViewById(R.id.gender);
holder.text6 = (TextView) rowView.findViewById(R.id.wardno);
holder.text7 = (TextView) rowView.findViewById(R.id.roomno);
holder.text8 = (TextView) rowView.findViewById(R.id.bedno);
holder.btnList = (Button) rowView.findViewById(R.id.listbutton);
/*Button editButton = (Button) rowView.findViewById(R.id.listbutton) ;
editButton.setTag(position);
editButton.setClickable(true);
editButton.setOnClickListener(EfficientAdapter.this);
rowView.setClickable(true);*/
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.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()));
holder.btnList.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show();
Intent next = new Intent(context, SeviceDetails.class);
Log.i("patient", " next "+ position + " onclickposition " + patientListArray.get(position).getMrnNumber());
patient = getPatientDetailsByMrn(patientListArray, position);
Log.i("DDDD ", patient.getMrnNumber());
next.putExtra("patient", patient);
next.putExtra("position", position);
System.out.println("patient"+ patient);
context.startActivity(next);
}
});
return rowView;
}
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();
}
public int getPositionForSection(int section) {
sortMyData();
Log.i("getPositionForSection", "section" + 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) {
Log.i("getPositionForSection- i", "section" + i);
//For numeric section
for (int k = 0; k <= 9; k++) {
if (StringMatcher.match(
String.valueOf(patientListArray.get(j)
.getName().charAt(0)),
String.valueOf(k)))
Log.i("getPositionForSection- j", "section" + j);
return j;
}
} else {
if (StringMatcher.match(
String.valueOf(patientListArray.get(j).getName()
.charAt(0)),
String.valueOf(mSections.charAt(i))))
return j;
}
}
}
return 0;
}
public int getSectionForPosition(int position) {
return 0;
}
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;
}
/**
* sorting the patientListArray data
*/
public void sortMyData() {
//sorting the patientListArray data
Collections.sort(patientListArray, new Comparator<Object>() {
@Override
public int compare(Object k1, Object k2) {
Patient p1 = (Patient) k1;
Patient p2 = (Patient) k2;
return p1.getName().compareToIgnoreCase(p2.getName());
}
});
}
}
.xml -
<Button
android:id="@+id/listbutton"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/name"
android:layout_marginRight="43dp"
android:focusable="false"
android:text="Episode"
android:textColor="#666666" />
Standard-listview
<ListView
android:id="@+id/homelistView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:dividerHeight="0dip" />
- sieht Ihre Schaltfläche ausgewählt werden, wenn Sie auf Sie drücken?
- kein Chef onclick-Ereignis nicht funktioniert..
- Ich weiß, dass auf click-event wird nicht gefeuert, aber wenn die Schaltfläche nicht ausgewählt ist, versuchen Sie, es als Element in der xml-Datei.
- button auswählen, aber onclick nicht funktioniert..
- Hmm seltsam, sind Sie sicher, dass Sie nicht gesetzt haben onClick = "someMethod()" in Ihrem xml-Code für die Schaltfläche?
- überprüfen Sie meine xml..
- justierbares = "false" sollte es tun.
- check-in 8. Zeile, füge ich es..
- sollte ich die Standard-listview in xml.. für custom listview. jede Idee..
- was tun und damit meine Standard-Liste anzeigen?
- sorry, ich werde hinzufügen von code vor.
- versuchen aufzublasen, wie dies stattdessen: vi.inflate(R. layout.homemplebrowview, null);
- rowView = inflater.inflate(R. layout.homemplebrowview, null);
- keine seiner arbeiten..
- sehr seltsame Mann, denn ich habe dies getan, bevor mit "BaseAdapter" und "ArrayAdapter" und es ist für mich arbeiten.
- wirklich yaar. kann u senden Sie mir den ganzen code der benutzerdefinierten Listenansicht mit der Basis-adapter, damit ich es vergleichen..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie Ihre Adapter zum füllen der Liste mit den Einträgen. Dann in der Activity oder Fragment-Sie implementieren sollten, die
onListItemClick
Ereignis behandeln die klicken Sie auf das Listenelement.EDIT: ich bin Entsendung ein Beispiel unten, wo ich bin mit einem
ListFragment
- das ist das Stück code, das ich zur Verfügung habe, ist jetzt, kann ich nach etwas bestimmten zuListView
später:Dann in Ihre
ListFragment
:Details
ListFragment
siehe hier.Ich denke, dass ein sehr schönes Beispiel (obwohl durch die Erweiterung
ArrayAdapter
stattBaseAdapter
ist hown in diese stackoverflow-Antwort.Gibt es einen Punkt zu erinnern:
android:focusable="false"
- wie Sie in Ihrem XML).onItemClick
event behandelt, wie unten dargestellt (Auszug aus dem link oben):Code:
Beachten Sie schließlich, einen Punkt. Diese Lösung bedeutet, dass Sie klicken Sie auf die Zeile Liste und der event gefeuert wird.
Ich denke, dass, wenn Sie möchten, dass der Benutzer auf die Schaltfläche zu klicken und das event gefeuert auf den button, dann müssen Sie rufen Sie
listview.setItemsCanFocus(true)
rechts, nachdem Sie Blasen Sie Ihre ListView-XML und stellen Sie sicher, dass die Schaltfläche istfocusable
in der XML. Zuhören für dieonClick
Ereignis sollte dann funktionieren.Dies ist beschrieben in der Folie 25 von der GoogleIO Welt des ListView-Präsentation (Sie können es hier und die video ist hier)
Hoffe, das hilft
android:focusable="false"
für die Schaltfläche ein (wie Sie), dann berühren Sie den Listeneintrag Feuer sollte dieonListItemClick
Veranstaltung. Dies sollte in Ordnung sein, es sei denn, Sie haben mehr als ein-Tasten auf die Zeile Liste.onItemSelected
ist auf das ListView-Steuerelement (nicht auf den button) und es wird auch in der callback die Position geklickt. Dann nutzen SiegetItemAtPosition
um den Zugriff auf das jeweilige Element.versuchen Sie die folgende Schaltfläche:
Schreiben Sie die
holder.btnList.setOnClickListener
innerhalb derif (rowView == null)
Zustand und versuchen Sie es erneut.verwenden Sie den folgenden code in der getView () - Methode: