tekrarlar:Android özel ListView Özel bir adaptörü seçimi arka plan
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;
}
}
Ve android4 tarzı çoklu seçim uygulamak gerekir (uzun basın, ardından öğeyi seçmek için tıklayın). Yani:
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));
}
sorun: Ben uzun basın (örneğin, ilk madde) madde, 7 madde (arka planını değiştirerek) çok vurgulandığında. 7. öğenin vurgulandığı "unhighlight" ı yapmaya çalıştığımda, uygulama çöküyor. En son öğeyi tıklamaya çalışırsam, uygulama çöküyor. Ben Görünüm işlenen ve öğeleri geri dönüşüm nasıl hakkında bazı makaleler okudum, ama benim sorun için olası çözeltisini
UPD bilmiyorum:
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)
Eğer LogCat stacktrace gönderebilir miyim
7. öğeyi kaldırdığınızda uygulamanız çöküyor? – tolgap
Yayının sonuna eklendi. –