MultiChoiceModeListener.onItemCheckedStateChanged() nur ausgeführt wird, wenn das Element aktiviert ist
Ich bin ein problem.
In meiner Haupttätigkeit, die sich ListActivity
und Implementiert MultiChoiceModeListener
, ich habe die überschrieben Methode onItemCheckedStateChanged()
.
Das problem ist, dass diese Methode nur ausgeführt, wenn der neue Aktivierungszustand des itrem AKTIVIERT ist. Wenn ich es deaktivieren, wird es nicht ausgeführt.
Ich check das Element programmgesteuert aus meiner DataListAdapter
. Mein Artikel-layout enthält eine CheckBox
, dass, wenn es überprüft, ich benutze die Steuerung ist onCheckedChanged()
um die Liste zu ändern Element-check-Zustand.
Irgendwelche Hinweise?
Hier ist mein code (die relevanten code only):
Haupttätigkeit:
public class MainActivity extends ListActivity implements MultiChoiceModeListener
{
@Override
protected void onCreate (Bundle bundle)
{
super.onCreate (bundle);
//Set our view from the "main" layout resource
setContentView (R.layout.main);
this.getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
this.getListView().setMultiChoiceModeListener(this);
_dataAdapter = new ServerListAdapter (this);
this.getListView(). setAdapter(_dataAdapter);
registerForContextMenu (this.getListView());
}
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean isChecked)
{
//Some code that only is executed when the setItemChecked is true on the DataListAdapter.
}
}
Liste-Adapter
public class ServerListAdapter extends BaseAdapter
{
@Override
public View getView (final int position, View convertView, ViewGroup parent)
{
View view = (convertView == null ?
_context.getLayoutInflater().inflate(
R.layout.server_list_item_view,
parent,
false) : convertView);
final ListView listView = (ListView)parent;
((CheckBox)view.findViewById(R.id.chkItemServerSelected)).setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton pCompound, boolean arg1)
{
listView.setItemChecked(position, pCompound.isChecked());
}
});
return view;
}
}
- Sind Sie in der Lage zu sagen, was dieser code wird nur ausgeführt, wenn es wahr ist? Oder zumindest sicherzustellen, dass die Methode nicht aufgerufen, wenn das falsch?
- es gibt eigentlich keine Notwendigkeit. Nur durch Debuggen kann ich sehen, dass die Methode ist nur nicht aufgerufen, wenn setItemChecked auf false gesetzt ist. Es ist nicht der code innerhalb der onItemCheckedStateChanged, dass ich Probleme habe, das ist die eigentliche Methode, die aufgerufen ist nicht beim falschen.
- Sie waren in der Lage das problem zu lösen? Scheint, wie ich auch bekommen - onItemCheckedStateChanged nicht genannt auf deaktivieren
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, Wie diese
Habe ich getan mit Benutzerdefinierten Multiple-Choice-ListView lösen Ihr Problem.
Gehen Sie durch den folgenden link für vollständige source-code.
http://amitandroid.blogspot.in/2013/03/android-custon-single-choice-lsitview.html
Dies ist ein single-choice-listview.
Sie müssen sich ändern und ändern müssen, um multipleChoice
Steps1)
Step2)
p
Schritt 3) listitem.xml
Hoffen, dass diese Hilfe für Sie.
So, ich löste ähnliche problem hatte ich auch.
Ein paar Dinge zu beachten:
BaseAdapter standardmäßig nicht stabil-id ' s, während Sie für die an - /abwählen, um richtig zu arbeiten, dass Ihr adapter sollte stabil-id ist. Überprüfen AbsListView.java source-code zu bestätigen. So überschreiben Sie
hasStableIds()
Methode in der adapter-Implementierung true zurück, und stellen Sie sichergetItemId(int position)
Gegenzug eine eindeutige id für jede Zeile.Nicht sicher, ob das zweite, was wirklich notwendig ist, aber nur für den Fall... Durch die default-Implementierung von Zeilen in der Liste sind nicht wählbar - Sie zeigen nur einige highlight, während Sie halten Sie Ihren finger auf das Element. Wenn Sie möchten, anzeigen eine Art von statischen highlight und halten ausgewählte Zeile - Ihr Element zu implementieren sollte
Checkable
- Schnittstelle. Als für mich - ich habe ein customCheckableLinearLayout
Umsetzung als Basis für alle meine Artikel. Das hat geklappt. Sie finden die Implementierung in das internet oder das schreiben zurück zu mir, ich poste hier.Und generell empfehle ich die Suche in
AbsListView
source-code, kann es wirklich helfen, zu verstehen, was schief geht,