AndroidStudio - служба привязки во фрагменте - PullRequest
1 голос
/ 23 февраля 2020

Я хочу использовать BindingService, и я делаю простой код игры, если я получу ответ, я могу получить правильное количество + 1. Также я хочу показать этот правильный счет в результате, поэтому я использовал Binding Service. Но счет не изменится. но я могу показать toastMessage, какие "성공", когда я запускаю это приложение, пожалуйста, помогите мне ..

  1. Это ScoreBroadFragment

     public class ScoreBoardFragment extends Fragment {
    
                    GameService mService;
                    boolean mBound = false;
                    private ExpandableListView expandableListView;
                    List<String> listGroup;
                    HashMap<String, List<Score>> listItem;
                    MainAdapter myAdapter;
                    //int correctcount;
                    int brandscore=0;
                    int personscore=0;
                    int capitalscore=0;
                    int proverbscore=0;
                    int teamcount=0;
                    int groupposition=0;
                    TextView groupview;
    
                    public ScoreBoardFragment() {}
    
                    public static ScoreBoardFragment newInstance(int teamcount)  {
                        ScoreBoardFragment scoreBoardFragment=new ScoreBoardFragment();
                        Bundle bundle=new Bundle();
                        bundle.putInt("teamcount", teamcount);
                        scoreBoardFragment.setArguments(bundle);
                        return scoreBoardFragment;
                    }
    
    
                    @Nullable
                    @Override
                    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
                        View view=inflater.inflate(R.layout.fragment_scoreboardfragment, container, false);
                        return view;
                    }
    
                    @Override
                    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
                        groupview=(TextView)view.findViewById(R.id.team_text);
                        expandableListView=(ExpandableListView)view.findViewById(R.id.expandable_listview);
                        listGroup=new ArrayList<>();
                        listItem=new HashMap<>();
    
                        Bundle bundle=getArguments();
                        teamcount=bundle.getInt("teamcount");
                        initListData();
                        myAdapter=new MainAdapter(getActivity(), listGroup, listItem);
                        expandableListView.setAdapter(myAdapter);
    
                    }
    
                    /*
                    @Subscribe
                    public void correctcountt(ImageFragment.Count event) {
                        GameService
                        correctcount=event.correctcount;
                        initListData();
                    }
    
                     */
    
                    @Subscribe
                    public void getPosition(int position)  {
                        groupposition=position;
                        groupview.setText(""+position);
                    }
    
                    private void initListData() {
                        String[] mystring={"1조", "2조", "3조", "4조", "5조", "6조"};
                        for(int i=0; i<=teamcount; i++) {
                            listGroup.add(mystring[i]);
                        }
                        List<Score> list=new ArrayList<>();
                        list.add(new Score(String.valueOf(brandscore),String.valueOf(capitalscore),String.valueOf(personscore),String.valueOf(proverbscore)));
    
                        listItem.put(mystring[groupposition], list);
                        //myAdapter.notifyDataSetChanged();
                    }
    
                    private ServiceConnection connection = new ServiceConnection() {
    
                        @Override
                        public void onServiceConnected(ComponentName className,
                                                       IBinder service) {
                            // We've bound to LocalService, cast the IBinder and get LocalService instance
                            GameService.LocalBinder binder = (GameService.LocalBinder) service;
                            mService = binder.getService();
                            mBound = true;
                            //Update(mService.getRetriever());
                            //updateScore(mService.notice());
    
                            updateScore(mService.notice());
                            Toast.makeText(getActivity(),"success", Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void onServiceDisconnected(ComponentName arg0) {
                            mBound = false;
                            Toast.makeText(getActivity(), "실패", Toast.LENGTH_SHORT).show();
                        }
                    };
    
                    private void updateScore(int correct) {
                        brandscore=correct*10;
                        myAdapter.notifyDataSetChanged();
                    }
    
    
                    public class MainAdapter extends BaseExpandableListAdapter{
    
                        Context mContext;
                        //바깥 데이터(큼직한 데이터)
                        List<String> listGroup;
                        //더 짜잘한 데이터
                        HashMap<String, List<Score>> listItem;
    
                        public MainAdapter(Context context, List<String> listGroup, HashMap<String, List<Score>> listItem)    {
                            mContext=context;
                            this.listGroup=listGroup;
                            this.listItem=listItem;
    
                        }
                        @Override
                        public int getGroupCount() {
                            return listGroup.size();
                        }
    
                        @Override
                        public int getChildrenCount(int groupPosition) {
                            //몇번째 큼지막한 덩어리인지 알려준다.
                            return listItem.get(this.listGroup.get(groupPosition)).size();
                        }
    
                        @Override
                        public Object getGroup(int groupPosition) {
                            return this.listGroup.get(groupPosition);
                        }
    
                        @Override
                        public Object getChild(int groupPosition, int childPosition) {
                            return this.listItem.get(this.listGroup.get(groupPosition)).get(childPosition);
                            //해석하면 바깥그룹이 몇번째 인지 얻은다음, 그 안에서 몇번째 item인지를 넣어 구한것이다.
                        }
    
                        @Override
                        public long getGroupId(int groupPosition) {
                            return groupPosition;
                        }
    
                        @Override
                        public long getChildId(int groupPosition, int childPosition) {
                            return childPosition;
                        }
    
                        @Override
                        public boolean hasStableIds() {
                            return false;
                        }
    
                        @Override
                        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    
                            String group=(String)getGroup(groupPosition);
    
                            ParentViewholder parentViewholder;
                            if(convertView==null)   {
                                LayoutInflater layoutInflater=(LayoutInflater)mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
                                convertView=layoutInflater.from(mContext).inflate(R.layout.list_group, null);
    
                                parentViewholder=new ParentViewholder();
                                parentViewholder.ParentTextView=convertView.findViewById(R.id.list_parent);
    
                                convertView.setTag(parentViewholder);
                            }
    
                            else    {
                                parentViewholder= (ParentViewholder) convertView.getTag();
                            }
    
                            parentViewholder.ParentTextView.setText(group);
                            return convertView;
                        }
    
                        @Override
                        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    
                            //String child=(String)getChild(groupPosition, childPosition);
                            SonViewholder sonViewholder;
                            if(convertView==null)   {
                                sonViewholder=new SonViewholder();
                                LayoutInflater layoutInflater=(LayoutInflater)mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
                                convertView=layoutInflater.from(mContext).inflate(R.layout.list_child, null);
    
                                sonViewholder.SonTextView=convertView.findViewById(R.id.list_child);
                                convertView.setTag(sonViewholder);
                            }
    
                            else {
                                sonViewholder = (SonViewholder) convertView.getTag();
                            }
                            Score child= (Score) getChild(groupPosition, childPosition);
                            sonViewholder.SonTextView.setText(child.toString());
    
                            return convertView;
                        }
    
                        @Override
                        public boolean isChildSelectable(int groupPosition, int childPosition) {
                            return true;
                        }
                    }
    
                    public class ParentViewholder   {
                        TextView ParentTextView;
                    }
    
                    public class SonViewholder  {
                        TextView SonTextView;
                    }
    
                    @Override
                    public void onStart() {
                        super.onStart();
                        Intent intent = new Intent(getActivity(), GameService.class);
                        getActivity().bindService(intent, connection, Context.BIND_AUTO_CREATE);
                        EventBus.getDefault().register(this);
                    }
    
                    @Override
                    public void onStop() {
                        super.onStop();
    
                        if(mBound)  {
                            getActivity().unbindService(connection);
                            mBound = false;
                        }
                    }
    
                    @Override
                    public void onDestroyView() {
                        super.onDestroyView();
                        EventBus.getDefault().unregister(this);
                    }
                }
    

2 . Это imagefragment

                public class ImageFragment extends Fragment {

                        private ImageView myImage;
                        private Button correct;
                        private Button pass;
                        private int resource=0;
                        private int click=0;
                        private int correctcount=0;
                        private TextView correctTextview;

                        public ImageFragment()  {}

                        public static ImageFragment newInstance(int imageresource)  {
                            ImageFragment imageFragment=new ImageFragment();
                            Bundle bundle=new Bundle();
                            bundle.putInt("imagefile", imageresource);
                            imageFragment.setArguments(bundle);
                            return imageFragment;
                        }

                        private static final Integer[] images = {
                                R.drawable.ajg, R.drawable.brand, R.drawable.ggm, R.drawable.gjt, R.drawable.jkr, R.drawable.kjs, R.drawable.person,
                                R.drawable.sunny, R.drawable.trp
                        };

                        @Nullable
                        @Override
                        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

                            View view=inflater.inflate(R.layout.imagefragment, container, false);
                            myImage=(ImageView)view.findViewById(R.id.imagefile);
                            pass=(Button)view.findViewById(R.id.pass);
                            correct=(Button)view.findViewById(R.id.correct);
                            correctTextview=(TextView)view.findViewById(R.id.correctview);
                            Bundle bundle=getArguments();
                            resource=bundle.getInt("imagefile");
                            myImage.setImageResource(resource);

                            return view;
                        }

                        @Subscribe(threadMode = ThreadMode.MAIN)
                        public void changeImage(BrandActivity.ItemClick event)    {

                            switch (event.id)   {
                                case R.id.pass:
                                    Toast.makeText(getActivity(),"pass"+click, Toast.LENGTH_SHORT).show();
                                    myImage.setImageResource(images[click]);
                                    if(click<images.length) {
                                        click=click+1;
                                    }
                                    else {
                                        Toast.makeText(getActivity(), "마지막장입니다.", Toast.LENGTH_SHORT).show();
                                    }
                                    break;
                                case R.id.correct:
                                    Toast.makeText(getActivity(),"correct"+click, Toast.LENGTH_SHORT).show();
                                    myImage.setImageResource(images[click]);
                                    if(click<images.length) {
                                        click=click+1;
                                    }
                                    else {
                                        Toast.makeText(getActivity(), "마지막장입니다.", Toast.LENGTH_SHORT).show();
                                    }
                                    getCorrectcount();
                                    break;
                            }
                            /* if (resource==0) {
                                Toast.makeText(getActivity(), "시작을 먼저 해주세요!", Toast.LENGTH_SHORT).show();
                            }
                            else    {

                            }
                             */
                        }

                        private void getCorrectcount()   {
                            correctcount=correctcount+1;
                            correctTextview.setText("정답 갯수 : "+correctcount);
                            Intent intent=new Intent(getActivity(), GameService.class);
                            intent.setAction(GameService.ACTION_CORRECT);
                            intent.putExtra("correct",correctcount+2);
                            getActivity().startService(intent);
                            /*
                            Count countevent=new Count(correctcount);
                            EventBus.getDefault().post(countevent);

                             */
                        }

                        /*
                        //eventbus
                        public class Count{
                            int correctcount;
                            public Count(int correctcount)  {
                                this.correctcount=correctcount;
                            }
                        }
                         */

                        @Override
                        public void onStart() {
                            super.onStart();
                            EventBus.getDefault().register(this);
                        }

                        @Override
                        public void onDestroyView() {
                            super.onDestroyView();
                            EventBus.getDefault().unregister(this);
                        }
                    }

Это игровой сервис

            public class GameService extends Service {

                public int correctcount;
                public static String ACTION_CORRECT="correctt";
                //게임진행중일 때 계속해서 점수를 Count해주어야 한다.(점수를 제공하는 역할을 할 것)

                @Override
                public int onStartCommand(Intent intent, int flags, int startId) {
                    String action=intent.getAction();
                    if(action.equals(ACTION_CORRECT)) {
                        correctcount=intent.getIntExtra("correct",1);
                        notice();
                        /*
                        MediaMetadataRetriever retriever=intent.getParcelableExtra("retriever");
                        update(retriever);
                        이게 불가능하다. 왜냐하면 MediaMetaDataRetriever가 일반 class이기 때문이다.
                        우리가 만약에 만든 Memo class라면 모를까 이미 정의되어 있으므로 바꿀수 x
                         */
                    }
                    return START_STICKY;
                }

                public int notice() {
                    return correctcount;
                }


                @Nullable
                @Override
                public IBinder onBind(Intent intent) {
                    return mbinder;
                }

                private final IBinder mbinder = new LocalBinder();

                public class LocalBinder extends Binder {
                    public GameService getService() {

                        return GameService.this;

                    }
                }


            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...