简体   繁体   中英

how to store button colour value in shared preference and used in condition and change button colour while click the button

in my app I have to show event as invitation if we click the invitation the yes no maybe button will displayed and if we click the any of the button that colour of the button should change and it should hold the colour forever until we change the response(yes no maybe). here I posted my code

public class InvitationFragment extends Fragment {
    LayoutInflater inflater;
    ViewGroup container;
    Bundle savedInstanceState;
    private List<String> eventName = new ArrayList<>();
    private List<Long> eventId = new ArrayList<>();
    private List<String> eventPlace = new ArrayList<>();
    private List<EventMO> eventMOs = new ArrayList<>();
    private List<Long> eventUserId = new ArrayList<>();
    private Context context;
    private UserOccasions userOccasions;
    private UserDelegate userDelegate = new UserDelegate();
    private EventDelegates eventDelegates = new EventDelegates();
    private Gson gson = new Gson();
    private ProgressDialog prgDialog;
    private UserMO userMO;
    private CheckBox invitationCheckBox;
    private ListView occasionView;
    private DatabaseHelper dbHelper;
    private View view;
    private SharedPreferences sharedpreferences;


    public boolean onOptionsItemSelected(MenuItem item) {
        Log.d("onOptionsItemSelected", "yes");

        switch (item.getItemId()) {
            case R.id.menu_cancel_event:
                displayInvitationList();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }

    }

    public void displayInvitationList() {

        int itemCount = occasionView.getCheckedItemCount();
        for (int i = 1; i <= itemCount; i++) {
            if (userOccasions.getCheckedInvitationCount() != null) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
               // eventUserId = userOccasions.getCheckedInvitationCount();
               // db.delete("user_relation", "EVENT_USER_ID" + " = ?", new String[]{Long.toString(eventUserId)});
                db.close();
            }
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
            savedInstanceState) {
        this.inflater = inflater;
        this.container = container;
        this.savedInstanceState = savedInstanceState;
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        final View view = inflater.inflate(R.layout.invitation_tab, container, false);
        context = getActivity().getApplicationContext();
        prgDialog = new ProgressDialog(getActivity());
        eventId.clear();
        eventName.clear();
        eventPlace.clear();
        // Set Progress Dialog Text
        prgDialog.setMessage("Please wait...");
        // Set Cancelable as False
        prgDialog.setCancelable(false);
        prgDialog.show();


        DatabaseHelper dbHelper = new DatabaseHelper(context);
        userMO = dbHelper.getRingeeUserData(1);
        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... arg0) {
                return eventDelegates.getAllEventForUser(userMO, context);
            }

            @Override
            protected void onPostExecute(String eventLists) {
                if (eventLists != "null") {
                    eventMOs = gson.fromJson(eventLists, new TypeToken<List<EventMO>>() {
                    }.getType());
                    Toast.makeText(context, "total items of eventMo" + eventMOs.size(), Toast.LENGTH_LONG).show();

                    for (EventMO eventMO : eventMOs) {
                        eventName.add(eventMO.getText());
                        eventId.add(eventMO.getEventId());
                        eventPlace.add(eventMO.getPlace());
                    }

                    DatabaseHelper dbHelper = new DatabaseHelper(context);
                    //long totalInsertion = dbHelper.insertUserRelationTable(userMOs);
                    prgDialog.dismiss();
                    //Toast.makeText(context, "total userMos size " + userMOs.size() + "total db insertion size " + totalInsertion, Toast.LENGTH_LONG).show();
                    occasionView = (ListView) view.findViewById(R.id.invitation_list_view);
                    userOccasions = new UserOccasions();
                    occasionView.setAdapter(userOccasions);
                    occasionView.setItemsCanFocus(false);
                    occasionView.setTextFilterEnabled(true);
                    occasionView.setOnItemClickListener(occasionView.getOnItemClickListener());
                }
            }
        }.execute(null, null, null);
        return view;
    }


    private class UserOccasions extends BaseAdapter {
        LayoutInflater mInflater;
        TextView eventNameTxtV, eventPlaceTxtV;
        private ArrayList<EventMO> checkedInvitationItems;
        private Object invitationTag;

        UserOccasions() {
            mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            this.checkedInvitationItems = new ArrayList<EventMO>();
        }


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

        @Override
        public Object getItem(int position) {
            return position;
        }

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

        // show list values name and mobile number in contact page
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            if (null == convertView) {
                convertView = mInflater.inflate(R.layout.invitation, null);
            }
            eventNameTxtV = (TextView) convertView.findViewById(R.id.invitationTitle);
            eventPlaceTxtV = (TextView) convertView.findViewById(R.id.invitationPlace);
            eventNameTxtV.setText(eventMOs.get(position).getText());
            eventPlaceTxtV.setText(eventMOs.get(position).getPlace());
            // intializing variables
            final EventMO eventMO = eventMOs.get(position);
            convertView.setTag(position);
            View v = convertView.findViewById(R.id.invitation_single);

            final LinearLayout eventLayout = (LinearLayout) convertView.findViewById(R.id.invitation_single);
            invitationCheckBox = (CheckBox) convertView.findViewById(R.id.invitationCheckBox);
            Button yesBtn = (Button) convertView.findViewById(R.id.yesButton);
            Button noBtn = (Button) convertView.findViewById(R.id.noButton);
            Button maybeBtn = (Button) convertView.findViewById(R.id.buttonMayBe);

            final LinearLayout responseLayout = (LinearLayout) convertView.findViewById(R.id.hidden);

            invitationCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                                             boolean isChecked) {

                    if (isChecked) {

                        checkedInvitationItems.add((EventMO) eventMO);
                    } else {

                        checkedInvitationItems.remove((EventMO) eventMO);
                    }

                }

            });

            //Based on the user click, response will be stored
            yesBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    responseLayout.setVisibility(View.GONE);
                    //If user clicks yes button in invitation response layout,response would be stored as 1 for event user
                    final int response = 1;
                    final long eventId = eventMOs.get(position).getEventId();
                    userMO.setIsAttending(response);

                    new AsyncTask<Void, Void, String>() {
                        protected String doInBackground(Void... arg0) {
                            return userDelegate.updateEventUserRelationShipMapping(userMO, eventId);

                        }

                    }.execute(null, null, null);

                }

            });
            noBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    responseLayout.setVisibility(View.GONE);
                    //If user clicks no button in invitation response layout,response would be stored as 0 for event user
                    final int response = 0;
                    final long eventId = eventMOs.get(position).getEventId();
                    userMO.setIsAttending(response);

                    new AsyncTask<Void, Void, String>() {
                        protected String doInBackground(Void... arg0) {
                            return userDelegate.updateEventUserRelationShipMapping(userMO, eventId);

                        }

                    }.execute(null, null, null);
                }
            });
            maybeBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    responseLayout.setVisibility(View.GONE);
                    //If user clicks maybe button in invitation response layout,response would be stored as  for event user
                    final int response = 2;
                    userMO.setIsAttending(response);
                    final long eventId = eventMOs.get(position).getEventId();

                    new AsyncTask<Void, Void, String>() {
                        protected String doInBackground(Void... arg0) {
                            return userDelegate.updateEventUserRelationShipMapping(userMO, eventId);

                        }

                    }.execute(null, null, null);
                }
            });


            eventLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    switch (v.getId()) {
                        case R.id.invitation_single:
                            responseLayout.setVisibility(View.VISIBLE);
                            break;
                    }
                }


            });


            return convertView;
        }

        public ArrayList<EventMO> getCheckedInvitationCount() {
            return this.checkedInvitationItems;
        }


    }
}

here I have tried the following code for change the colour of the button when the button clicked but it will not hold the colour when we go back and return back to the button and it will work for all events

yesBtn.setbackgroundColor(color.Yellow);
noBtn.setbackgroundColor(color.blue);
maybeBtn.setbackgroundColor(color.blue);

the above mentioned code is under yesBtn.oncliclListener() method

here how to use shared preference to solve that issue

You can store color in shared preference as Int. But as a suggestion , you need not store color , but some flag value 1,2,3,etc and based on that value you can set your color on the button

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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