-->

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 :
ArrayAdapter adapter2=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
Facebook Comments

4 komentar

mas artikelnya sangat berguna

maaf saya newbie soal android
tolong kalo bisa dibahas juga detail di xml nya donk mas

saya sangat kesulitan membuat spinner didalam listview nya ,

terimakasih :D

Balas

masss....gmn bila spinnernya ngambil data dari database mysql lokal???minta tutornya y mas..saya dah muter2 nyari nie g ketemu,,ini email saya benbear91@gmail.com...

Balas

if i only want to show spinner at row 1 and 2, how can I do it? thanjks

Balas

if i only want to show spinner at row 1 and 2, how can I do it? thanjks

Balas