Vorwort: Ich bin sehr neu in Android. Ich habe mich umgesehen, zahlreiche Tutorials gelesen und das Konzept hier immer noch nicht begriffen. Ich entschuldige mich im Voraus, wenn es etwas Einfaches ist.Schwierigkeit mit FragmentPagerAdapter
Ich habe eine Aktivität, die einen FragmentPagerAdapter mithilfe von Standardcode aus der Vorlage in Android Studio implementiert. Mein Ziel ist es, zwischen verschiedenen Instanzen des gleichen Fragments zu wechseln, um Spieler-Scores zu verfolgen (d. H. Das gleiche Layout, unterschiedliche Bewertungen in jedem). Momentan kann ich zwischen verschiedenen Fragmenten wechseln. Ich kann auf Schaltflächen auf dem ersten Fragment klicken, um die Partitur zu berechnen, aber wenn ich zum nächsten Fragment umschalte und auf eine Schaltfläche klicke, passiert nichts in diesem Fragment, aber die Partitur des ersten Fragments ändert sich. Ich denke, das liegt daran, dass es nur ein Fragment verwendet und nicht die 7, die ich brauche. Wenn Sie mir helfen könnten, herauszufinden, wie die gespeicherten Partituren in jedem Fragment gespeichert werden und dass die Schaltflächen auf, sagen wir Fragment2, nur die Partituren auf Fragment2 ändern. Hier
ist das, was ich bisher:
package com.brbecker.tabletopcompanion.Games;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import com.brbecker.tabletopcompanion.MainActivity;
import com.brbecker.tabletopcompanion.R;
public class SwipeActivity extends Activity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
// Supposed to be able to create multiple fragment instances and get at them again later.
private SwipeTestFragment player1, player2, player3, player4, player5, player6, player7;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_swipe, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
Dann wird die FragmentPagerAdapter Klasse
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a SwipeTestFragment.
return SwipeTestFragment.newInstance(position + 1);
}
@Override
public int getCount() {
// Show 7 total pages.
return 7;
}
// This method is supposed to save a reference to a created Fragment.
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
switch (position) {
case 0:
player1 = (SwipeTestFragment) createdFragment;
break;
case 1:
player2 = (SwipeTestFragment) createdFragment;
break;
case 2:
player3 = (SwipeTestFragment) createdFragment;
break;
case 3:
player4 = (SwipeTestFragment) createdFragment;
break;
case 4:
player5 = (SwipeTestFragment) createdFragment;
break;
case 5:
player6 = (SwipeTestFragment) createdFragment;
break;
case 6:
player7 = (SwipeTestFragment) createdFragment;
break;
}
return createdFragment;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "PLAYER 1";
case 1:
return "PLAYER 2";
case 2:
return "PLAYER 3";
case 3:
return "PLAYER 4";
case 4:
return "PLAYER 5";
case 5:
return "PLAYER 6";
case 6:
return "PLAYER 7";
}
return null;
}
}
Dann wird das Fragment Code:
public class SwipeTestFragment extends Fragment implements View.OnClickListener {
// The fragment argument representing the section number for this fragment.
private static final String ARG_SECTION_NUMBER = "section_number";
public SwipeTestFragment() {
}
// Returns a new instance of this fragment for the given section number.
public static SwipeTestFragment newInstance(int sectionNumber) {
SwipeTestFragment fragment = new SwipeTestFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setRetainInstance(true);
View rootView = inflater.inflate(R.layout.fragment_swipe, container, false);
//Set Page Title
TextView playerHeading = (TextView) rootView.findViewById(R.id.playerHeading);
String playerHeadingString = "Player " + getArguments().getInt(ARG_SECTION_NUMBER);
playerHeading.setText(playerHeadingString);
//This section sets up buttons.
ImageButton minusone = (ImageButton) rootView.findViewById(R.id.minusBtn1);
minusone.setOnClickListener(this);
ImageButton plusone = (ImageButton) rootView.findViewById(R.id.plusBtn1);
plusone.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View v) {
TextView score = (TextView) getActivity().findViewById(R.id.scoreSevenWonders);
TextView coins = (TextView) getActivity().findViewById(R.id.coinsSevenWonders);
switch (v.getId()) {
case R.id.minusBtn1:
String presentvaluestring = coins.getText().toString();
if (Integer.parseInt(presentvaluestring) > 0) {
int presentvalueint = Integer.parseInt(presentvaluestring);
presentvalueint--;
coins.setText(String.valueOf(presentvalueint));
if (presentvalueint % 3 == 2) {
setPlayerScore(-1, score);
}
}
break;
case R.id.plusBtn1:
presentvaluestring = coins.getText().toString();
int presetvalueint = Integer.parseInt(presentvaluestring);
presentvalueint++;
if ((presentvalueint % 3) == 0) {
setPlayerScore(1, score);
}
coins.setText(String.valueOf(presentvalueint));
break;
}
}
public TextView setPlayerScore(int increment, TextView total) {
String totalstring = total.getText().toString();
int totalint = Integer.parseInt(totalstring); //see if Integer.parseInt(total.getText().toString()) will work
totalint += increment;
total.setText(String.valueOf(totalint));
return total;
}
}
Ich denke, es hat etwas damit zu tun, die getItem() -Methode, aber ich bin mir nicht sicher. Ich bin mehr als glücklich, zusätzlichen Code bei Bedarf zur Verfügung zu stellen.
Falls etwas doe nicht richtig aussehen, habe ich den Code für viele der Schaltflächen und Textansichten ausgeschnitten. – brbecker87