簡體   English   中英

從數據庫中刪除后如何刷新或更新片段

[英]How to refresh or update a fragment after deleting from the database

我是android開發的新手,我正在嘗試構建一本簡單的贊美詩集,正在使用底部導航,在每個選項卡上使用片段來顯示每個贊美詩的編號和標題。 在我最喜歡的片段中,我使用從數據庫中獲取的回收器視圖顯示了喜歡的歌曲列表。 我使用長按偵聽器從數據庫中的“收藏夾”表中刪除歌曲,但是每當我刪除歌曲時,我的“收藏夾”片段都不會被刷新或與當前項目一起出現。 請刪除我的歌曲后,如何刷新或更新我喜歡的片段。 謝謝!

'''收藏夾''

import android.app.FragmentManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

import static android.content.Context.MODE_PRIVATE;

public class FavouriteAdapter extends RecyclerView.Adapter<FavouriteAdapter.ViewHolder> {

    private Context favContext;
    private ArrayList<String> favNumbers = new ArrayList<>();
    private ArrayList<String> favTitles  = new ArrayList<>();

    public FavouriteAdapter(Context favContext, ArrayList<String> favNumbers, ArrayList<String> favTitles) {
        this.favContext = favContext;
        this.favNumbers = favNumbers;
        this.favTitles = favTitles;
    }

    @Override
    public FavouriteAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.favourite_list_items, parent, false);

        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(final FavouriteAdapter.ViewHolder holder, final int position) {

        holder.textViewFavNum.setText(favNumbers.get(position));
        holder.textViewFavTitle.setText(favTitles.get(position));
        final String hymn_no = favNumbers.get(position);
        holder.itemView.setTag(favNumbers.get(position));

        holder.favParentLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i;
                i = new Intent(view.getContext(), Songs.class);
                i.putExtra("numId", favNumbers.get(position));
                i.putExtra("titleName", favTitles.get(position));
                favContext.startActivity(i);

            }
        });


      holder.favParentLayout.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(final View view) {
                new AlertDialog.Builder(view.getContext())
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .setTitle("Are you sure?")
                        .setMessage("Do you want to delete from favorites?")
                        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int which) {


                                try{

                                    SQLiteDatabase favHymns = favContext.openOrCreateDatabase("Songs", MODE_PRIVATE, null);

                                    favHymns.execSQL("DELETE FROM favorites where hymnNum = '"+hymn_no+"'");

                                    Toast.makeText(favContext.getApplicationContext(), "hymn deleted ", Toast.LENGTH_LONG).show();

                                }catch(Exception e){
                                    e.printStackTrace();
                                }



                            }




                        })

                        .setNegativeButton("No", null)
                        .show();


                return true;


            }


        });


    }

    @Override
    public int getItemCount() {

        return favNumbers.size();

    }

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

    @Override
    public int getItemViewType(int position){
        return position;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView textViewFavNum;
        public TextView textViewFavTitle;
        RelativeLayout favParentLayout;
        public ViewHolder(View itemView) {
            super(itemView);

            textViewFavNum = (TextView) itemView.findViewById(R.id.textViewFavNum);
            textViewFavTitle = (TextView) itemView.findViewById(R.id.textViewFavTitle);
            favParentLayout  =  (RelativeLayout) itemView.findViewById(R.id.favParentLayout);
        }
    }
}

'''favourite fragment'''

    import android.app.FragmentManager;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v7.app.AppCompatActivity;
    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.TextView;
    import android.widget.Toast;

    import java.util.ArrayList;
    import java.util.logging.Handler;

    import static android.content.Context.MODE_PRIVATE;


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


        private RecyclerView recyclerView;
        private RecyclerView.Adapter adapter;
        private ArrayList<String> favSongNumbers = new ArrayList<>();
        private ArrayList<String> favSongTitles  = new ArrayList<>();
        private TextView favMessage;



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

        View view;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            if(view == null) {
                view = inflater.inflate(R.layout.fragment_favourites, container, false);
                favMessage = (TextView) view.findViewById(R.id.favMessage);
                recyclerView = (RecyclerView) view.findViewById(R.id.favRecyclerView);
                //  adapter.setHasStableIds(true);


                Toast.makeText(this.getActivity(), "Long press to delete hymns from favorites", Toast.LENGTH_LONG).show();

                initFavSongs();

            }


            return view;
        }

        private void initFavSongs(){



            try{

                favMessage.setText("");

                SQLiteDatabase favHymns = this.getActivity().openOrCreateDatabase("Songs", MODE_PRIVATE, null);

                Cursor c = favHymns.rawQuery("SELECT  hymnNum, hymnTitle FROM favorites", null);

                int hymnNumIndex = c.getColumnIndex("hymnNum");
                int hymnTitleIndex = c.getColumnIndex("hymnTitle");

                if(c.moveToFirst()) {

                    while (c != null) {

                        favSongNumbers.add(Integer.toString(c.getInt(hymnNumIndex)) + ". ");
                        favSongTitles.add(" " + c.getString(hymnTitleIndex));

                        c.moveToNext();
                    }

                }else{
                    favMessage.setText("Oops!No favorite songs added yet.");
                }


            }catch (Exception e){

                e.printStackTrace();

            }


            initRecyclerView();
        }

        private void initRecyclerView(){

            adapter = new FavouriteAdapter(this.getActivity(), favSongNumbers, favSongTitles);
            recyclerView.setAdapter(adapter);
            recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
        }


    }

將偵聽器傳遞給適配器,並在從數據庫中刪除項目時調用它。 然后更新您的列表和適配器,就像這樣:

首先創建一個監聽器:

public interface UpdateListener {

        void onValueChangedListener();
    }

在來自片段的Adapter類中初始化偵聽器。

private UpdateListener updateListener;

     public FavouriteAdapter(Context favContext, ArrayList<String> favNumbers, ArrayList<String> favTitles,UpdateListener updateListener ) {
            this.favContext = favContext;
            this.favNumbers = favNumbers;
            this.favTitles = favTitles;
    this.updateListener=updateListener;

        }


    holder.favParentLayout.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(final View view) {
                    new AlertDialog.Builder(view.getContext())
                            .setIcon(android.R.drawable.ic_dialog_alert)
                            .setTitle("Are you sure?")
                            .setMessage("Do you want to delete from favorites?")
                            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int which) {


                                    try{

                                        SQLiteDatabase favHymns = favContext.openOrCreateDatabase("Songs", MODE_PRIVATE, null);

                                        favHymns.execSQL("DELETE FROM favorites where hymnNum = '"+hymn_no+"'");

                                        Toast.makeText(favContext.getApplicationContext(), "hymn deleted ", Toast.LENGTH_LONG).show();
// when any item delete from database notify the fragment through this 
  //  listener for updating your adapter
    updateListener.onValueChangedListener();


                                    }catch(Exception e){
                                        e.printStackTrace();
                                    }


                                }


                            })

                            .setNegativeButton("No", null)
                            .show();


                    return true;


                }


            });

//此方法對於更新適配器是必需的

public void update(ArrayList<String> favNumbers, ArrayList<String> favTitles){
this.favNumbers = favNumbers;
                this.favTitles = favTitles;
}

在片段中實現偵聽器,然后重新初始化列表。

public class Favourites extends Fragment implements UpdateListener { 

    private void initRecyclerView(){
// pass listener
        adapter = new FavouriteAdapter(this.getActivity(), favSongNumbers, favSongTitles,this);

    }

private void updateFavSongs(){

favSongNumbers.clear;
favSongTitles.clear;



            try{

                favMessage.setText("");

                SQLiteDatabase favHymns = this.getActivity().openOrCreateDatabase("Songs", MODE_PRIVATE, null);

                Cursor c = favHymns.rawQuery("SELECT  hymnNum, hymnTitle FROM favorites", null);

                int hymnNumIndex = c.getColumnIndex("hymnNum");
                int hymnTitleIndex = c.getColumnIndex("hymnTitle");

                if(c.moveToFirst()) {

                    while (c != null) {

                        favSongNumbers.add(Integer.toString(c.getInt(hymnNumIndex)) + ". ");
                        favSongTitles.add(" " + c.getString(hymnTitleIndex));

                        c.moveToNext();
                    }

                }else{
                    favMessage.setText("Oops!No favorite songs added yet.");
                }


            }catch (Exception e){

                e.printStackTrace();

            }
         adapter.update(favSongNumbers,favSongTitles);
         adapter.notifyDataSetChanged()

        }
    @Override
        public void onValueChangedListener(){
                    updateFavSongs();

    }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM