Android切换按钮保存状态自定义列表视图

时间:2019-05-18 20:14:01

标签: java android android-togglebutton

你好朋友,我是android新手,我想知道如何在自定义ToggleButton中保存ArrayAdapter状态,现在我想在ListView的帮助下创建自定义ArrayAdapter将其状态保存在Adapter中,这是我的代码pleae解释用于实现此目标的逻辑是什么,而对于初学者而言,该如何执行?

package bible.swordof.God;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.opengl.Visibility;
import android.preference.PreferenceManager;
import android.speech.tts.TextToSpeech;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;
import com.hitomi.cmlibrary.CircleMenu;
import com.hitomi.cmlibrary.OnMenuSelectedListener;
import com.hitomi.cmlibrary.OnMenuStatusChangeListener;

import java.util.List;
import java.util.Locale;

import es.dmoral.toasty.Toasty;

import static android.content.Context.MODE_PRIVATE;
import static android.database.sqlite.SQLiteDatabase.CONFLICT_NONE;
import static android.icu.lang.UCharacter.GraphemeClusterBreak.V;
import static android.support.constraint.Constraints.TAG;
import static android.support.v4.content.ContextCompat.createDeviceProtectedStorageContext;
import static android.support.v4.content.ContextCompat.startActivity;

public class FullverseAdopter extends ArrayAdapter < String > {
    private ALLVERSE activity;

    private List < String > versenumber;
    private List < String > verseid;
    private List < String > verselist;
    private List < String > refernce;
    TextToSpeech textToSpeech;
    private DatabaseHelper mDBHelper;
    private SQLiteDatabase mDb;
    private boolean save;
    public static final String MyPREFERENCES = "MyPrefs";


    //check for availabe language
    int result;


    public FullverseAdopter(ALLVERSE context, int resource, List < String > versenumber, List < String > verselist, List < String > refernce, List < String > verseid) {
        super(context, resource, versenumber);
        this.activity = context;
        this.versenumber = versenumber;
        this.verselist = verselist;
        this.refernce = refernce;
        this.verseid = verseid;



    }


    @Override
    public int getCount() {
        return versenumber.size();
    }

    @Override
    public String getItem(int position) {
        return versenumber.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        // If holder not exist then locate all view from UI file.
        if (convertView == null) {
            // inflate UI from XML file
            convertView = inflater.inflate(R.layout.versedisplayrow, parent, false);
            // get all UI view
            holder = new ViewHolder(convertView);
            // set tag for holder

            holder.versenumber = (TextView) convertView.findViewById(R.id.versenumber);
            holder.verselist = (TextView) convertView.findViewById(R.id.verse);


            convertView.setTag(holder);
        } else {
            // if holder created, get tag from view
            holder = (ViewHolder) convertView.getTag();
        }
        holder.versenumber.setText(versenumber.get(position));
        holder.verselist.setText(verselist.get(position));

        //share verse
        holder.share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toasty.info(activity, "Sharing a verse.", Toast.LENGTH_SHORT, true).show();
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_TEXT, refernce.get(position) + ":" + versenumber.get(position) + '\n' + verselist.get(position));
                sendIntent.setType("text/plain");
                activity.startActivity(sendIntent);

            }
        });


        textToSpeech = new TextToSpeech(activity, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {

                if (status == TextToSpeech.SUCCESS) {
                    result = textToSpeech.setLanguage(Locale.ENGLISH);
                } else {

                    Toast.makeText(activity, "YOUR DEVICE NOT SUPPORTED", Toast.LENGTH_SHORT).show();
                }
            }
        });




        //My toggle button 
        holder.bookmark.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (isChecked) {


                } else {

                }
            }
        });
        //mDBHelper = new DatabaseHelper(activity);
        //mDb = mDBHelper.getWritableDatabase();


        //ContentValues contentValues=new ContentValues();
        //contentValues.put("id",verseid.get(position));
        //contentValues.put("bookname",refernce.get(position));
        //contentValues.put("versenumber",versenumber.get(position));
        //contentValues.put("verse",verselist.get(position));
        //long check=mDb.insert("favourite",null,contentValues);

        //Log.d("MY_TAG","DB IS NOW "+check);

        //Toasty.success(activity, "Added in favouite"+check, Toast.LENGTH_SHORT, true).show();

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

                Toast.makeText(activity, "I AM CLICKED", Toast.LENGTH_SHORT).show();

                if (result == TextToSpeech.LANG_NOT_SUPPORTED || result == TextToSpeech.LANG_MISSING_DATA) {

                    Toast.makeText(activity, "Language not supported or Missing", Toast.LENGTH_SHORT).show();

                } else {


                    textToSpeech.speak(verselist.get(position), TextToSpeech.QUEUE_FLUSH, null);

                }
            }
        });


        /* holder.removebookmark.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

             mDBHelper = new DatabaseHelper(activity);
               mDb = mDBHelper.getWritableDatabase();

              // long delete= mDb.delete("favourite","id=?",new String[]{verseid.get(position)});




               //Toasty.error(activity, "Remove in favouite"+delete, Toast.LENGTH_SHORT, true).show();
            }
        });*/


        return convertView;
    }

    static class ViewHolder {
        private ToggleButton favourite;
        private TextView versenumber;
        private TextView verselist;
        private CircleMenu circleMenu;
        private ImageView share;

        //toggle button
        public ToggleButton bookmark;

        private boolean defaultvalue;

        private ALLVERSE activity;
        private ImageView speakverse;

        public ViewHolder(View v) {
            versenumber = (TextView) v.findViewById(R.id.versenumber);
            verselist = (TextView) v.findViewById(R.id.verse);
            share = (ImageView) v.findViewById(R.id.share);
            bookmark = (ToggleButton) v.findViewById(R.id.adbookmark);
            speakverse = (ImageView) v.findViewById(R.id.speakverse);

        }
    }
}

1 个答案:

答案 0 :(得分:0)

理想情况下,适配器是用于适应特定数据集以在listview中呈现视图的对象。因此,您应该为该列表视图中可见的每一行都具有一个数据结构(类对象),并将其放入数组列表中。根据getView方法中的位置,检索该行的数据并从该数据初始化视图。现在,该数据集可以以任何格式(最好以JSON格式)保存在服务器或本地内存中,以后可以取回。