简体   繁体   English

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

[英]Android toggle button save state custom listview

Hello friend i am new in android i want to know how to save ToggleButton state in custom ArrayAdapter i create custom ListView with help of ArrayAdapter now i want how save its state in Adapter here is my code pleae explain what logic used to achieve this goal i am on beginner level don't how to achieve this goal? 您好朋友,我是android的新手,我想知道如何在自定义ArrayAdapter保存ToggleButton状态,现在要在ArrayAdapter帮助下创建自定义ListView ,我想如何在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);

        }
    }
}

Ideally an adapter is an object to adapt a particular dataset to render a view within a listview. 理想情况下,适配器是用于适应特定数据集以在列表视图内呈现视图的对象。 So you should have a data structure (class object) for every row visible in that list view and put it in an array list. 因此,您应该为该列表视图中可见的每一行都具有一个数据结构(类对象),并将其放入数组列表中。 Based on the position in getView method, retrieve the data for the row and initialize views from this data. 根据getView方法中的位置,检索该行的数据并从该数据初始化视图。 Now this data set can be saved on server or in local memory in any format preferably in JSON and can be retrieved back in future. 现在,该数据集可以以任何格式(最好以JSON格式)保存在服务器或本地内存中,并且将来可以取回。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM