مشکل در ایجاد علاقه مندی ها در اپ

0 امتیاز
61 بازدید
سوال شده مرداد 23, 1395 توسط android  

سلام وقت بخیر

من یه اپ دارم که میخوام دکمه ای برای علاقه مندی ها ایجاد کنم براش و وقتی کلیک کردم رنگ دکمه عوض بشه  که مشخص بشه که توی لیست علاقه مندی ها هستش.یه دیتابیس دارم که یک ستونی داره به اسم fav که مقدار ۰ و ۱ داره که  اما وقتی اجرا میگیرم روی دگمه کلیک میکنم رنگ دگمه عوض مبشه ولی وقتی بک میزنم و دوباره مبرم به همون بخش دوباره رنگش برگشته به قروز انگار که با دیتابیس ارتباط بر قرار نکرده کدها رو میزارم ممنون میشم بررسی کنید

کلاس دیتابیس هلپر

//avval kelase database ro misazim va extends mikonim
public class DatabaseHelper extends SQLiteOpenHelper
{
    private Context context;
    private SQLiteDatabase myDatabase;

    public DatabaseHelper(Context context)
    {
        //dovvom ye celase dg misazim va yekseri maghadir ro behesh midim k azuna dar zir estefade kardam.Info_db
        super(context, Info_db.DB_NAME, null, Info_db.DB_VERSION);
//sevvom shart gozashtam baraye inke ba tavajo b noskhe sdk masir ro moshakhas konam baraye zakhireie database
        if (Build.VERSION.SDK_INT >= 15)
        {
            Info_db.DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
        } else
        {
            Info_db.DB_PATH = Environment.getDataDirectory() + " /data/ " + context.getPackageName() + " /databases/ ";
        }
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {

    }

    public void checkAndCopyDatabase()
    {
        boolean dbExist = checkDatabase();
        if (dbExist)
        {
            Log.d("TAG", "database already exist");
        } else
        {
            this.getReadableDatabase();
        }

        try
        {
            copyDataBase();
        } catch (IOException e)
        {
            e.printStackTrace();
            Log.d("TAG", "Error copy database");
        }
    }

    public boolean checkDatabase()
    {
        SQLiteDatabase checkDB = null;
        try
        {


            String myPath = Info_db.DB_PATH + Info_db.DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
        } catch (SQLiteException e)
        {

        }

        if (checkDB != null)
        {
            checkDB.close();
        }
        return checkDB != null ? true : false;
    }

    /**
     * Copies your database from your local assets-folder to the just created
     * empty database in the system folder, from where it can be accessed and
     * handled. This is done by transfering bytestream.
     */
    private void copyDataBase() throws IOException
    {
        // Open your local db as the input stream
        InputStream myInput = context.getAssets().open(Info_db.DB_NAME);
        // Path to the just created empty db
        String outFileName = Info_db.DB_PATH + Info_db.DB_NAME;
        // Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);
        // transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0)
        {
            myOutput.write(buffer, 0, length);
        }
        // Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }

    public void openDatabase()
    {
        String myPath = Info_db.DB_PATH + Info_db.DB_NAME;
        myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }

    public synchronized void close()
    {
        if (myDatabase != null)
        {
            myDatabase.close();
        }
        super.close();
    }

    public Cursor QueryData(String query)
    {
        return myDatabase.rawQuery(query, null);
    }
متد هایی که برای این بحث ساخته شده

    public int fav_value(int id)
    {
        SQLiteDatabase db = this.getReadableDatabase();
        String query = "select "+Info_db.Data_Fav+" from "+Info_db.Table_Name+" where "+Info_db.Data_Id+" = "+id+"";
        int value = 0;
        Cursor cursor = db.rawQuery(query, null);
        if(cursor.moveToFirst())
        {
            value = cursor.getInt(cursor.getColumnIndex(Info_db.Data_Fav));
            do
            {

            }while (cursor.moveToNext());
        }
        db.close();

        return value;
    }

    public void fav(int status, int id){
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "update "+Info_db.Table_Name+" set "+Info_db.Data_Fav+" = "+status+" where "+Info_db.Data_Id+" = "+id+"";
        db.execSQL(query);
        db.close();

    }

}

 

 

فرگمنتی که میخوایم توش کار کنیم

 

public class Frag_first extends Fragment
{

    private RecyclerView recyclerView;
    private DatabaseHelper databaseHelper;
    private ArrayList<Info_data> arrayList = new ArrayList<Info_data>();
    private Cursor cursor;
    private Adapter_first adapter_first;
    private FloatingActionButton floatingActionButton;
    public static int id;
    public int value;

    public Frag_first()
    {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        // Inflate the layout for this fragment
        ViewGroup viewGroup = (ViewGroup) inflater.inflate(R.layout.fragment_frag_first, container, false);
        recyclerView = (RecyclerView) viewGroup.findViewById(R.id.recy_504_first);
        //tarife floting va etesale an be recycler view baraye inke vaghti scrool shod mahv beshe
        floatingActionButton = (FloatingActionButton) viewGroup.findViewById(R.id.fabFav);
        floatingActionButton.attachToRecyclerView(recyclerView);

قسمتی که مربوط به این مبحث هستش

        final DatabaseHelper databaseHelper = new DatabaseHelper(getActivity());
        value = databaseHelper.fav_value(id);

        if (value == 0){
            //setcolorred
            floatingActionButton.setColorFilter(Color.argb(255,255,0,17));
        }else {
            //setcolorgreen
            floatingActionButton.setColorFilter(Color.argb(255,0,255,124));
        }

        floatingActionButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                if(value == 0)
                {
                    databaseHelper.fav(1, id);
                    floatingActionButton .setColorFilter(Color.argb(255,0,255,124));
                }else
                {
                    databaseHelper.fav(0, id);
                    floatingActionButton .setColorFilter(Color.argb(255,255,0,17));

                }
                value = databaseHelper.fav_value(id);

            }
        });



        loadDatabase();
        return viewGroup;
    }

    public void loadDatabase()
    {
        databaseHelper = new DatabaseHelper(getActivity());
        try
        {


            databaseHelper.checkAndCopyDatabase();
            databaseHelper.openDatabase();
        } catch (SQLiteException e)
        {
            e.printStackTrace();
        }
        try
        {

            cursor = databaseHelper.QueryData("SELECT * FROM tbl_504 COMPANY LIMIT 0,12");
            if (cursor != null)
            {
                if (cursor.moveToFirst())
                {
                    do
                    {
                        Info_data info_data = new Info_data();
                        info_data.setWord(cursor.getString(1));
                        info_data.setMean(cursor.getString(2));
                        info_data.setCoding(cursor.getString(3));
                        info_data.setSynon(cursor.getString(4));
                        info_data.setSpell(cursor.getString(6));

                        arrayList.add((info_data));
                    } while (cursor.moveToNext());
                }
            }
        } catch (SQLiteException e)
        {
            e.printStackTrace();
        }
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
        adapter_first = new Adapter_first(getActivity(), arrayList);
        adapter_first.setOnTopListener(new OnTopListener()
        {
            @Override
            public void OnTopView(int position)
            {
                Toast.makeText(getContext(), "Click to" + position, Toast.LENGTH_SHORT).show();

            }
        });
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(linearLayoutManager);
        AlphaInAnimationAdapter alphaInAnimationAdapter = new AlphaInAnimationAdapter(adapter_first);
        ScaleInAnimationAdapter scaleInAnimationAdapter = new ScaleInAnimationAdapter(alphaInAnimationAdapter);
        scaleInAnimationAdapter.setDuration(500);
        scaleInAnimationAdapter.setFirstOnly(false);
        recyclerView.setAdapter(scaleInAnimationAdapter);
    }

}

 

این مطلب را به اشتراک بگذارید

1 پاسخ

0 امتیاز
پاسخ داده شده مرداد 23, 1395 توسط sajjadfcb  
سلام . لطفا پروژه رو آپلود کنید تا براتون درستش کنم.
دارای دیدگاه مرداد 23, 1395 توسط android  

سلام ممنون میشم ازتون

سورس رو ارسال کردم شما این کار رو فقط برای درس اول انجام بدید من باقی درس ها رو روی همون انجام میدم .فعلا فقط درس اول و دوم رو حاظر کردم که شما زحمت این رو بگشید برای اینکه فقط با دیتابیس ارتباط برقرار کنه و favorite سیو بشه تو دیتابیس

 

http://s1.picofile.com/file/8263601350/BookRevision.zip.html

 

دارای دیدگاه مرداد 23, 1395 توسط sajjadfcb  
من کد هاتون رو نگاه کردم ، چون شما می خواهید که یک لیستی از جمله هارو به علاقه مندی ها اضافه کنید با این کد ها و این ساختار دیتابیس نمیشه اینکارو کرد درصورتی این کد ها به درد میخوره که بخواهید هر یک از آیتم های لیست رو به علاقه مندی ها اضافه کنید ولی شما چون میخواهید یک لیست رو به علاقه مندی ها اضافه کنید پیشنهاد من استفاده از Sharedprefrences هستش .این روش بهینه تر وسریعتره اگر بخواید کد هاشو براتون بنویسم.
دارای دیدگاه مرداد 24, 1395 توسط android  
اگر همون پروژه رو با sharedPreferences درست کنید برام خیلی خیلی ممنون میشم.یکی از درسارو درست کنید بقیه رو میزارم .مرسی.فقط لطفا کامنت گذاری کنید برام تا خودم درکشون کنم چجوری کار کردید.مرسی
دارای دیدگاه مرداد 24, 1395 توسط sajjadfcb  

کد هاتون رو درست کردم وقتی روی Floating Action Butto کلیک میکنید. دیگه تو همون حالت میمونه اینم کدهاش برای کلاس های دیگه هم کافیه کد های مربوطه رو کپی کنید.

package com.example.mint.bookrevision.frag;


import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;


import com.example.mint.bookrevision.classes.DatabaseHelper;
import com.example.mint.bookrevision.classes.Info_data;
import com.example.mint.bookrevision.classes.OnTopListener;
import com.example.mint.bookrevision.R;
import com.example.mint.bookrevision.adapter.Adapter_first;
import com.melnykov.fab.FloatingActionButton;

import java.util.ArrayList;

import jp.wasabeef.recyclerview.adapters.AlphaInAnimationAdapter;
import jp.wasabeef.recyclerview.adapters.ScaleInAnimationAdapter;


/**
 * A simple {@link Fragment} subclass.
 */
public class Frag_first extends Fragment {

    private RecyclerView recyclerView;
    private DatabaseHelper databaseHelper;
    private ArrayList<Info_data> arrayList = new ArrayList<Info_data>();
    private Cursor cursor;
    private Adapter_first adapter_first;
    private FloatingActionButton floatingActionButton;
    public static int id;
    public int value;
    SharedPreferences share;
    Boolean floating;

    public Frag_first() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        ViewGroup viewGroup = (ViewGroup) inflater.inflate(R.layout.fragment_frag_first, container, false);
        recyclerView = (RecyclerView) viewGroup.findViewById(R.id.recy_504_first);
        //tarife floting va etesale an be recycler view baraye inke vaghti scrool shod mahv beshe
        floatingActionButton = (FloatingActionButton) viewGroup.findViewById(R.id.fabFav);
        floatingActionButton.attachToRecyclerView(recyclerView);

        //final DatabaseHelper databaseHelper = new DatabaseHelper(getActivity());
        //value = databaseHelper.fav_value(id);


        /*
                 in ja ham vagti activity ro baz mikonim megdare float action button ro daryaft mikonim va neshon midim
                 baraye activity haye badi ham in code ha ro copy konid kar mikone fagat bayad in do megdar ro bala tarif
                 konid ta hame ja dastrasi dashte bashid behesh

                 SharedPreferences share;
                 Boolean floating;
        */
        share = getActivity().getSharedPreferences("floating", Context.MODE_PRIVATE);
        floating = share.getBoolean("float", false);

        if (!floating) {
            //setcolorred
            floatingActionButton.setColorFilter(Color.argb(255, 255, 0, 17));
        } else {
            //setcolorgreen
            floatingActionButton.setColorFilter(Color.argb(255, 0, 255, 124));
        }
        /*
                  in ja vazeiat float action button ro taghir midim yani age roshan
                  bo khamosh mishe va age khamosh bod roshan mishe va halatesh ro ham toye SharedPrefrences zakhire mikonim
        */
        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (floating) {
                    floating = false;
                    floatingActionButton.setColorFilter(Color.argb(255, 255, 0, 17));
                    SharedPreferences.Editor editor = share.edit();
                    editor.putBoolean("float", false);
                    editor.apply();


                } else {
                    floating = true;
                    floatingActionButton.setColorFilter(Color.argb(255, 0, 255, 124));
                    SharedPreferences.Editor editor = share.edit();
                    editor.putBoolean("float", true);
                    editor.apply();


                }
                //value = databaseHelper.fav_value(id);

            }
        });


        loadDatabase();
        return viewGroup;
    }

    public void loadDatabase() {
        databaseHelper = new DatabaseHelper(getActivity());
        try {


            databaseHelper.checkAndCopyDatabase();
            databaseHelper.openDatabase();
        } catch (SQLiteException e) {
            e.printStackTrace();
        }
        try {

            cursor = databaseHelper.QueryData("SELECT * FROM tbl_504 COMPANY LIMIT 0,12");
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    do {
                        Info_data info_data = new Info_data();
                        info_data.setWord(cursor.getString(1));
                        info_data.setMean(cursor.getString(2));
                        info_data.setCoding(cursor.getString(3));
                        info_data.setSynon(cursor.getString(4));
                        info_data.setSpell(cursor.getString(6));

                        arrayList.add((info_data));
                    } while (cursor.moveToNext());
                }
            }
        } catch (SQLiteException e) {
            e.printStackTrace();
        }
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
        adapter_first = new Adapter_first(getActivity(), arrayList);
        adapter_first.setOnTopListener(new OnTopListener() {
            @Override
            public void OnTopView(int position) {
                Toast.makeText(getContext(), "Click to" + position, Toast.LENGTH_SHORT).show();

            }
        });
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(linearLayoutManager);
        AlphaInAnimationAdapter alphaInAnimationAdapter = new AlphaInAnimationAdapter(adapter_first);
        ScaleInAnimationAdapter scaleInAnimationAdapter = new ScaleInAnimationAdapter(alphaInAnimationAdapter);
        scaleInAnimationAdapter.setDuration(500);
        scaleInAnimationAdapter.setFirstOnly(false);
        recyclerView.setAdapter(scaleInAnimationAdapter);
    }

}
دارای دیدگاه مرداد 24, 1395 توسط android  
ممنونم.با این کار میتونم توی یه اکتیویتیه دیگه اونایی که کلیک شدن رو داشته باشم؟ که کاربر یه لیستی از درسای کلیک شده رو داشته باشه به این معنی که این درس ها رو خوانده
دارای دیدگاه مرداد 25, 1395 توسط sajjadfcb  

بله خیلی راحته یدونه اکتیویتی میسازید وتوش یدونه لیست ویو قرار میدید.بعد تو فایل جاوا کد های زیر رو قرار میدید.

package com.example.mint.bookrevision;


import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.example.mint.bookrevision.activity.Activity_first;

import java.util.ArrayList;
import java.util.List;

public class Fav extends AppCompatActivity {


    ListView listview;
    List<String> list;
    ArrayAdapter<String> adapter;

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

        SharedPreferences share = getSharedPreferences("floating", MODE_PRIVATE);
        final Boolean floating = share.getBoolean("float", false);

        
        listview = (ListView) findViewById(R.id.listview);


        list = new ArrayList<String>();

        if (floating) {
            list.add("first");
        }
        
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        listview.setAdapter(adapter);


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

                String text = ((TextView) selecteRow).getText().toString();
                if (text.equals("first")) {
                    startActivity(new Intent(Fav.this, Activity_first.class));
                }
                adapter.notifyDataSetChanged();
            }
        });


    }


}

تو این کد ما  SharedPrefrences رو تعریف کردیم و گفتیم اگه trueبود یدونه آیتم به لیست اضافه کن.

بعد تو متد setOnItemClickListner گفتیم که   اگر متن آیتمی که کلیک شده برابر با first بود بیا وبه  اکتیویتی درس اول برو.

موفق باشید.

733 سوال

672 پاسخ

1,177 دیدگاه

335 کاربر

متاسفانه نیستم

این مطلب را به اشتراک بگذارید

ali.ashkaran@gmail
ما .....
  • سعی بر پاسخگویی به سوالات دیگران داریم.
  • به سوال و یا نظر دیگران احترام می گذاریم .
  • این وبسایت را به دیگران معرفی می کنیم.
  • همواره صمیمیت و ادب را رعایت می کنیم.
  • به سوالمان برچسب های مرتبط اضافه می کنیم.
  • در حین طرح سوال فرد خاصی را مخاطب قرار نمی دهیم .
...