ich einen benutzerdefinierten Adapter:Android benutzerdefinierte Listview wiederholt Auswahl Hintergrund
public class PhraseCustomAdapter extends BaseAdapter
{
public String original[];
public String translation[];
public String transcription[];
public Activity context;
public LayoutInflater inflater;
public PhraseCustomAdapter(Activity context,String[] original, String[] translation, String[] transcription) {
super();
this.context = context;
this.original = original;
this.translation = translation;
this.transcription = transcription;
inflater = LayoutInflater.from(context);
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return original.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public String getItemTranlation(int position) {
return translation[position];
}
public String getItemTranscription(int position) {
// TODO Auto-generated method stub
return transcription[position];
}
public String getItemOriginal(int position) {
// TODO Auto-generated method stub
return original[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
static class ViewHolder
{
ImageView imgViewLogo;
TextView txtViewOriginal;
TextView txtViewTranslation;
TextView txtViewTranscription;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.phrase_row, null);
holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);
holder.txtViewOriginal = (TextView) convertView.findViewById(R.id.txtViewOriginal);
holder.txtViewTranslation = (TextView) convertView.findViewById(R.id.txtViewTranslation);
holder.txtViewTranscription = (TextView) convertView.findViewById(R.id.txtViewTranscription);
convertView.setTag(holder);
}
else
holder=(ViewHolder)convertView.getTag();
holder.txtViewOriginal.setText(original[position]);
holder.txtViewTranslation.setText(translation[position]);
holder.txtViewTranscription.setText(transcription[position]);
return convertView;
}
}
Und ich brauche Android4-Stil Multi-Auswahl zu implementieren (lang drücken, dann auf Punkt wählen). Also:
lview1 = (ListView) findViewById(R.id.listViewPhrase);
adapter = new PhraseCustomAdapter(this, original, translation, transcription);
lview1.setAdapter(adapter);
lview1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
lview1.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
View view;
if (checked){
Log.v ("checked?", "YES");
Log.v ("Position", Integer.toString(position));
view = lview1.getChildAt(position);
view.setBackgroundColor(Color.LTGRAY);
original_list.add (adapter.getItemOriginal(position));
translation_list.add (adapter.getItemTranlation(position));
transcription_list.add (adapter.getItemTranscription(position));
countSelected += 1;
}
if (!checked){
Log.v ("checked?", "NO");
Log.v ("Position", Integer.toString(position));
for (int i = 0; i < original_list.size(); i++)
{
if (original_list.get(i) == adapter.getItemOriginal(position)){
original_list.remove (i);
translation_list.remove (i);
transcription_list.remove (i);
}
}
countSelected -= 1;
}
mode.setTitle(Integer.toString(countSelected) + " " + getString(R.string.selectItem));
}
Das Problem ist: Wenn ich lang drückt das Element (zum Beispiel erster Punkt), der siebte Artikel zu markiert ist (durch Hintergrund ändern). Wenn ich versuche, das 7. Objekt zu "heben", stürzt die App ab. Wenn ich versuche, auf den neuesten Artikel zu klicken, stürzt die App ab. Ich habe einige Artikel lesen, wie Ansicht gerendert wird und Gegenstände recyceln, aber ich weiß nicht, jede mögliche Lösung für mein Problem
UPD: LogCat ausgegeben, wenn die 7. Position „unhighlighting“:
V/checked?(24966): YES
V/Position(24966): 7
Shutting down VM
threadid=1: thread exiting with uncaught exception (group=0x2b542210)
AndroidRuntime(24966): FATAL EXCEPTION: main
java.lang.NullPointerException
at com.alextee.phrases.PhraseActivity$1.onItemCheckedStateChanged(PhraseActivity.java:145)
at android.widget.AbsListView$MultiChoiceModeWrapper.onItemCheckedStateChanged(AbsListView.java:5688)
at android.widget.AbsListView.performItemClick(AbsListView.java:1040)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2522)
at android.widget.AbsListView$1.run(AbsListView.java:3183)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Können Sie die LogCat Stacktrace bei Post Ihre App stürzt ab, wenn Sie den siebten Eintrag entfernen? – tolgap
Hinzugefügt am Ende des Posts. –