Я хочу использовать BindingService, и я делаю простой код игры, если я получу ответ, я могу получить правильное количество + 1. Также я хочу показать этот правильный счет в результате, поэтому я использовал Binding Service. Но счет не изменится. но я могу показать toastMessage, какие "성공", когда я запускаю это приложение, пожалуйста, помогите мне ..
Это 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;
}
}
}