Android 在自定义listview中保存togglebutton状态

Android 在自定义listview中保存togglebutton状态,android,listview,togglebutton,custom-adapter,Android,Listview,Togglebutton,Custom Adapter,我一直在搜索如何在自定义listview中保存togglebutton的状态。我有一个带有自定义适配器的listview,它有一个文本、切换按钮和一个imageview,想法是当切换按钮时,imageview会改变以显示灯泡打开,我需要保存灯泡打开和关闭的状态 这是我的密码: 活动: import android.app.Activity; import android.app.ListActivity; import android.content.Intent; import android

我一直在搜索如何在自定义listview中保存togglebutton的状态。我有一个带有自定义适配器的listview,它有一个文本、切换按钮和一个imageview,想法是当切换按钮时,imageview会改变以显示灯泡打开,我需要保存灯泡打开和关闭的状态

这是我的密码:

活动:

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.ToggleButton;

import Adapters.MenuLucesAdapter;
import Adapters.MenuLucesDimAdapter;

public class MenuLuces extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getActionBar().hide();
        setContentView(R.layout.menu_luces);

        ListView list1, list2;

        String[] iluminacionGrupos = getResources().getStringArray(R.array.iluminacion_Grupos);
        String[] iluminacionNombres = {
                "Nombre 1",
                "Nombre 2",
                "Nombre 3",
                "Nombre 4",
                "Nombre 5",
                "Nombre 6",
        };
        String[] iluminacionDimNombres = {
                "Nombre Luz Dimeada",
                "Nombre Dim",
                "Nombre Dim",
                "Nombre Dim",
                "Nombre Dim",
                "Nombre Dim",
        };
        Boolean bulbState = false;
        Integer bulbDim = 0;
        // Array of booleans to store toggle button status
        boolean[] estadolamparasonoff = { false, false, false, false, false ,false };


        if (savedInstanceState != null)
        {
            estadolamparasonoff = savedInstanceState.getBooleanArray("estadolamparasonoff");
        }

        //**************** ListView1*****************//

        list1 = (ListView) findViewById(R.id.ListView1);
        MenuLucesAdapter adapter = new MenuLucesAdapter(this, iluminacionGrupos, iluminacionNombres, bulbState);
        list1.setAdapter(adapter);


        list1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Log.i("MenuLuces", "Item seleccionado " + position);

                if (position == 0) {
                    //Intent menuLucesIntent = new Intent(getApplicationContext(), MenuLuces.class);
                    //startActivity(menuLucesIntent);
                }

            }

        });

    //**************** ListView2*****************//

        list2 = (ListView) findViewById(R.id.ListView2);
        MenuLucesDimAdapter adapterdim = new MenuLucesDimAdapter(this, iluminacionGrupos, iluminacionDimNombres, bulbDim);
        list2.setAdapter(adapterdim);


        list2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.i("MenuLucesDim", "Item seleccionado " + position);

                // Dependiendo de la posicion creamos un Intent para abrir la Activity correspondiente
                if (position == 0) {
                    //Intent menuLucesIntent = new Intent(getApplicationContext(), MenuLuces.class);
                    //startActivity(menuLucesIntent);
                }

            }

        });

    }

}
导入android.app.Activity;
导入android.app.ListActivity;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.Toast;
导入android.widget.ToggleButton;
导入Adapters.MenuLucesAdapter;
导入Adapters.MenuLucesDimAdapter;
公共类菜单扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getActionBar().hide();
setContentView(R.layout.menu_luces);
列表视图列表1、列表2;
字符串[]iluminacionGrupos=getResources().getStringArray(R.array.iluminacion\u Grupos);
字符串[]iluminacionNombres={
“名义1”,
“名称2”,
“名义3”,
“名称4”,
“名义5”,
“名称6”,
};
字符串[]iluminacionDimNombres={
“Nombre Luz Dimada”,
“名义暗淡”,
“名义暗淡”,
“名义暗淡”,
“名义暗淡”,
“名义暗淡”,
};
布尔bulbState=false;
整数bulbDim=0;
//存储切换按钮状态的布尔数组
布尔[]estadolamparasonoff={false,false,false,false,false};
如果(savedInstanceState!=null)
{
estadolamparasonoff=savedInstanceState.getBooleanArray(“estadolamparasonoff”);
}
//****************列表视图1*****************//
list1=(ListView)findViewById(R.id.ListView1);
MenuluceAdapter=新MenuluceAdapter(this,iluminacionGrupos,iluminacionNombres,bulbState);
列表1.设置适配器(适配器);
list1.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
日志i(“菜单”、“项目选择”+位置);
如果(位置==0){
//Intent MENULUCESENTENT=新的Intent(getApplicationContext(),MenuLuces.class);
//星触觉(menuLucesIntent);
}
}
});
//****************列表视图2*****************//
list2=(ListView)findViewById(R.id.ListView2);
MenuLucesDimAdapter adapterdim=新的MenuLucesDimAdapter(this,iluminacionGrupos,iluminacionDimNombres,bulbDim);
列表2.设置适配器(adapterdim);
list2.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Log.i(“菜单尺寸”、“项目选择”+位置);
//根据相应的活性,使用Posicon乳膏
如果(位置==0){
//Intent MENULUCESENTENT=新的Intent(getApplicationContext(),MenuLuces.class);
//星触觉(menuLucesIntent);
}
}
});
}
}
适配器:

package Adapters;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.ToggleButton;



public class MenuLucesAdapter extends ArrayAdapter<String> {
    private final Activity context;
    private final String[] iluminacionGrupos;   
    private final String[] iluminacionNombres;  
    boolean [] switchState = new boolean[100]; //
    private final Boolean bulbState;            

    public MenuLucesAdapter(Activity context,
    String[] iluminacionGrupos, String[] iluminacionNombres, Boolean bulbState) {
        super(context, R.layout.menu_luces_listview, iluminacionGrupos);
        this.context = context;
        this.iluminacionGrupos = iluminacionGrupos;
        this.iluminacionNombres = iluminacionNombres;
        this.bulbState = bulbState;
    }

    public static class ViewHolder {
        TextView txtGrupo;
        TextView txtNombre;
        ImageView estadoBulbo;
        ToggleButton botonlamp;
    }


    ViewHolder holder = new ViewHolder();

    //Se asocia el Layout con el Listview customizado para cada item de la lista segun la variable position
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        //---print the index of the row to examine---
        Log.d("Luces ON/OFF",String.valueOf(position));
        View v = convertView;

        if (v == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            v = inflater.inflate(R.layout.menu_luces_listview, null, true);

            //---get a reference to all the views on the xml layout---
            holder.txtGrupo = (TextView) v.findViewById(R.id.textView_LucesGrupo);
            holder.txtNombre = (TextView) v.findViewById(R.id.textView_LucesNombre);
            holder.estadoBulbo = (ImageView) v.findViewById(R.id.imageView_Bulb);
            holder.botonlamp = (ToggleButton) v.findViewById(R.id.toggleButton_LucesOnOff);
            v.setTag(holder);
        }

        else {
            // Get the ViewHolder back
            holder = (ViewHolder) v.getTag();
        }

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
        holder.botonlamp.setChecked(sharedPreferences.getBoolean("toggleButton"+position, false));  //default is false

        //---customize the content of each row based on position---
        holder.txtGrupo.setText(iluminacionGrupos[position]);
        holder.txtNombre.setText(iluminacionNombres[position]);

/*
        holder.botonlamp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                    //int index =  (Integer) v.getTag();
                    //Log.i("tag of switch==",""+index);
*/

        holder.botonlamp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putBoolean("toggleButton"+position, holder.botonlamp.isChecked());
                editor.commit();

                    if(holder.botonlamp.isChecked())
                    {
                        holder.estadoBulbo.setImageResource(R.drawable.bulb_led_on);

                    }

                    else
                    {
                        holder.estadoBulbo.setImageResource(R.drawable.bulb_led_off);

                    }
                }
            });

        /*
            if(switchState[position])
                holder.estadoBulbo.setImageResource(R.drawable.bulb_led_on);
            else
                holder.estadoBulbo.setImageResource(R.drawable.bulb_led_off);
        */

            holder.botonlamp.setTag(new Integer(position));

            return v;
    }

    @Override

    public int getViewTypeCount() {

        return getCount();
    }

    @Override
    public int getItemViewType(int position) {

        return position;
    }

}
包适配器;
导入android.app.Activity;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.preference.PreferenceManager;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.CompoundButton;
导入android.widget.ImageView;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入android.widget.ToggleButton;
公共类MenuluceAdapter扩展了ArrayAdapter{
私人最终活动背景;
私有最终字符串[]iluminacionGrupos;
私有最终字符串[]iluminacionNombres;
布尔[]开关状态=新布尔[100]//
私有布尔布尔布尔基状态;
公共菜单适配器(活动上下文,
字符串[]iluminacionrupos,字符串[]iluminacionNombres,布尔布尔值bulbState){
super(上下文,R.layout.menu_luces_listview,iluminacionGrupos);
this.context=上下文;
this.iluminacionGrupos=iluminacionGrupos;
this.iluminacionNombres=iluminacionNombres;
this.bulbState=bulbState;
}
公共静态类视图持有者{
TextView-txtGrupo;
TextView txtNombre;
ImageView estadoBulbo;
切换按钮两个放大器;
}
ViewHolder=新的ViewHolder();
//Se asocia el布局con el Listview自定义数据项列表位置变量
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
//---打印要检查的行的索引---
Log.d(“Luces开/关”,String.valueOf(位置));
视图v=转换视图;
如果(v==null){
LayoutInflater充气器=上下文。getLayoutInflater();
v=充气机充气(R.layout.menu\u luces\u listview,null,true);
//---获取对xml布局上所有视图的引用---
holder.txtGrupo=(TextView)v.findViewById(R.id.TextView_LucesGrupo);
holder.txtNombre=(TextView)v.findViewById(R.id.TextView_LucesNombre);
holder.estadoBulbo=(图像视图)v.findViewById(R.id.ImageView\u灯泡);
holder.botonlamp=(ToggleButton)v.findViewById(R.id.ToggleButton_lucesnoff);
v、 设置标签