Spinner di dalam listview
Akhirnya setelah beberapa hari mencari ketemu juga masalah yang ane alami dalam membuat custom adapter pada listview dengan menggunakan spinner di dalam list itemnya. Masalah yang ane temui yaitu pada waktu menjalankan aplikasi ini pada waktu menjalankan listview, spinner berjalan dengan baik tetapi waktu saya ganti nilainya, spinner nomor 1 saya ganti spinner nomor 6 juga ganti seperti nomor 1 setelah ane scroll ke bawah. Setelah ane scroll ke atas nilai spinner 1 kembali ke asal, kemudian spinner ke 2 malah yang ganti nilainya dengan spinner 1. Cukup membuat ane binggung 3 hari kemarin. Dan setelah berjuang sempet juga ane ganti spinner tersebut dengan menggunakan textview. Tetapi masalah juga ane dapatkan waktu isi textview 1 setelah ane tekan tombol back yang terisi malah textview nomor 6, dan seterusnya membuat semakin bingung. Nah sebagai gambaran aja listiview yang ane dapatkan sebagai berikut :
Nah ane share kode custom adapter yang ane gunakan untuk mendapatkan spinner ini berjalan dengan baik
package org.data.provider.model.adapter; import java.util.ArrayList; import java.util.List; import org.data.provider.GivenTableActivity; import org.data.provider.R; import org.data.provider.UsabilityActivity; import org.data.provider.tools.ChartTools; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; /** * Class yang digunakan untuk menampilkan text dengan spinnernya penggunaan list * data id=text_nilai id=nilai * * @author mrhands * */ public class Text3Adapter extends BaseAdapter { private Activity activity; private String[] title; private String[] value; private int [] selected; public String[] textJawaban; public Spinner [] spinner; private static LayoutInflater inflater = null; public Activity getActivity() { return activity; } public void setActivity(Activity activity) { this.activity = activity; } public String[] getValue() { return value; } public void setValue(String[] value) { this.value = value; } public static LayoutInflater getInflater() { return inflater; } public static void setInflater(LayoutInflater inflater) { Text3Adapter.inflater = inflater; } public String[] getTitle() { return title; } public void setTitle(String[] title) { this.title = title; } public Text3Adapter(Activity a, String[] title, String[] value) { this.value = value; activity = a; activity.setTheme(android.R.style.Theme_Light); this.title = title; this.textJawaban = new String[value.length]; //inisialisasi nilai awal dengan nilai 1 for(int i=0;i<textJawaban.length;i++){ textJawaban[i]="1"; } this.selected=new int[value.length]; inflater = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } public static class ViewHolder { public TextView textDesc; public TextView textValue; public Spinner editText; public int ref; } public void refreshView() { notifyDataSetChanged(); } String[] items; @Override public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; String [] nilai=activity.getResources().getStringArray(R.array.tipe_nilai_pernyataan); ArrayAdapter<String> array=new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_item,nilai); array.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); final ViewHolder holder; if (convertView == null) { vi = inflater.inflate(R.layout.row_pernyataan, null); holder = new ViewHolder(); holder.textDesc = (TextView) vi.findViewById(R.id.text_item); holder.textValue = (TextView) vi.findViewById(R.id.no); holder.editText = (Spinner) vi .findViewById(R.id.txt_spinner_pernyataan); holder.editText.setAdapter(array); holder.editText.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { textJawaban[holder.ref]=holder.editText.getSelectedItem().toString(); selected[holder.ref]=holder.editText.getSelectedItemPosition(); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); vi.setTag(holder); } else { holder = (ViewHolder) vi.getTag(); } holder.ref=position; holder.textDesc.setText(title[position] + " position=" + position); holder.textValue.setText(value[position]); holder.editText.setSelection(selected[position]); return vi; } @Override public int getCount() { return title.length; } }Nah sedangkan untuk implementasi di activitynya sebagai berikut :
ArrayAdapteradapter2=new ArrayAdapter (UsabilityActivity.this, android.R.layout.simple_spinner_item,getApplicationContext().getResources().getStringArray(R.array.tipe_nilai_pernyataan)); //ganti dropdown resource adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); for(int i=0;i