Java 如何在列表视图中为特定事件单击按钮时更改颜色,并在关闭按钮并返回按钮时保持按钮颜色

Java 如何在列表视图中为特定事件单击按钮时更改颜色,并在关闭按钮并返回按钮时保持按钮颜色,java,android,Java,Android,我在这里添加了我的invitationevent片段代码,我想在listview中单击特定事件的特定按钮时更改按钮的颜色 public class InvitationFragment extends Fragment { LayoutInflater inflater; ViewGroup container; Bundle savedInstanceState; private List<String> event

我在这里添加了我的invitationevent片段代码,我想在listview中单击特定事件的特定按钮时更改按钮的颜色

 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;
            }


        }
    }
上面提到的代码在yesBtn.oncliclistener方法下

这应该能奏效。

像这样试试, 创建res/color/button\u dark\u text.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true"
       android:color="#000000" /> <!-- pressed -->
 <item android:state_focused="true"
       android:color="#000000" /> <!-- focused -->
 <item android:color="#FFFFFF" /> <!-- default -->
 </selector>
在布局xml中

<Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="you text"
   android:textColor="@color/button_dark_text" />

谢谢你的回复,我会试试这个,稍后告诉你它是否有效,我想创建颜色,因为我已经有color.xml的值了。在这里,我们只定义了颜色名称。我的问题是,当我返回并返回此按钮时,它显示为正常颜色,而不是更改共享首选项中按钮的状态。您能告诉我如何使用共享首选项吗?因为我是安卓新手。这里是了解共享首选项的链接-
<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true"
       android:color="#000000" /> <!-- pressed -->
 <item android:state_focused="true"
       android:color="#000000" /> <!-- focused -->
 <item android:color="#FFFFFF" /> <!-- default -->
 </selector>
<Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="you text"
   android:textColor="@color/button_dark_text" />