У меня есть фрагмент со счетчиком и просмотр списка, представление списка обновляется, когда пользователь выбирает один из вариантов из счетчика, и я пришел к мысли, что мне нужно обновить фрагмент, когда выбран вариант.но проблема в том, что фрагмент идет в бесконечном цикле, когда я обновляю фрагмент из «onItemSelected», поэтому я сделал «метод refreshFragment» для решения проблемы, но теперь, после того, как пользователь выбирает опцию, первая опция из счетчика не обновляетсяфрагмент снова, все остальные параметры работают хорошо, кроме первого, потому что я не добавил «метод refreshFragment» в этот параметр, потому что, если я добавлю его, он снова перейдет в бесконечный цикл.извините за мой плохой английский, из-за этого я всегда получаю голоса.
public class MatchesFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener, AdapterView.OnItemSelectedListener {
private RecyclerView recyclerView;
private MatchAdapter matchAdapter;
private ArrayList<Matches> matchCollection;
SwipeRefreshLayout mSwipeRefreshLayout;
String apiLink;
String apiType = "1";
public MatchesFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_matches, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mSwipeRefreshLayout = (SwipeRefreshLayout) getView().findViewById(R.id.swiperefresh);
mSwipeRefreshLayout.setOnRefreshListener(this);
if (getArguments() != null) {
Bundle arguments = getArguments();
apiLink = arguments.getString("ApiLink");
apiType = arguments.getString("apiType");
Toast.makeText(getContext().getApplicationContext(), apiType, Toast.LENGTH_LONG).show();
}else {
apiLink = "http://first-api-link";
Toast.makeText(getContext().getApplicationContext(), "nothing", Toast.LENGTH_LONG).show();
}
Spinner spinner = (Spinner) getView().findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
R.array.planets_array, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);
ConnectivityManager cm = (ConnectivityManager) getContext().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
String answer = "Internet";
if (null != activeNetwork) {
if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
answer="You are connected to a WiFi Network";
if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
answer="You are connected to a Mobile Network";
init();
new FetchDataTask().execute();
}
else {
answer = "No internet Connectivity";
Toast.makeText(getContext().getApplicationContext(), answer, Toast.LENGTH_LONG).show();
}
}
private void init() {
recyclerView = (RecyclerView) getActivity().findViewById(R.id.matchesRecyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setHasFixedSize(true);
matchCollection = new ArrayList<>();
matchAdapter = new MatchAdapter(matchCollection, getActivity());
recyclerView.setAdapter(matchAdapter);
}
@Override
public void onRefresh() {
init();
new FetchDataTask().execute();
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
apiLink = "http://first-api-link";
switch (position){
//can't add refreshFragment in here it makes infinity lopp
case 0: apiLink = "first-api-link";
break;
case 1:
refreshFragment("second-api-link", 2);
break;
case 2:
refreshFragment("third-api-link", 3);
break;
case 3:
refreshFragment("fourth-api-link", 4);
break;
case 4:
refreshFragment("fifth-api-link", 5);
break;
case 5:
refreshFragment("sixth-api-link", 6);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
public class FetchDataTask extends AsyncTask<Void, Void, Void> {
private String mZomatoString;
@Override
protected Void doInBackground(Void... params) {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
Uri builtUri = Uri.parse(apiLink);
URL url;
try {
url = new URL(builtUri.toString());
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty("user-key", "acfd3e623c5f01289bd87aaaff1926c1");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
if (inputStream == null) {
//Nothing to do
return null;
}
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line + "\n");
}
if (buffer.length() == 0) {
return null;
}
mZomatoString = buffer.toString();
JSONObject jsonObject = new JSONObject(mZomatoString);
Log.v("Response", jsonObject.toString());
JSONArray matchArray = jsonObject.getJSONArray("data");
//list = new ArrayList<>();
for (int i = 0; i < matchArray.length(); i++) {
Log.v("BRAD_", i + "");
String home_team;
String away_team;
String home_flag;
String away_flag;
JSONObject jTeam = (JSONObject) matchArray.get(i);
if (apiType == "1"){
JSONObject jHomeTeam = (JSONObject) jTeam.getJSONObject("home_team");
JSONObject jAwayTeam = (JSONObject) jTeam.getJSONObject("away_team");
//get data's from json sent from link
home_team = jHomeTeam.getString("name");
away_team = jAwayTeam.getString("name");
home_flag = jHomeTeam.getString("flag");
away_flag = jAwayTeam.getString("flag");
}else{
//get data's from json sent from link
home_team = jTeam.getString("home_team");
away_team = jTeam.getString("away_team");
home_flag = "https://www.countries-ofthe-world.com/flags-normal/flag-of-Russia.png";
away_flag = "https://www.countries-ofthe-world.com/flags-normal/flag-of-Russia.png";
}
Matches matches = new Matches();
matches.setHome_team(home_team);
matches.setAway_team(away_team);
matches.setHome_flag(home_flag);
matches.setAway_flag(away_flag);
matchCollection.add(matches);
// Stopping swipe refresh
mSwipeRefreshLayout.setRefreshing(false);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
Log.e("MainActivity", "Error closing stream", e);
}
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
matchAdapter.notifyDataSetChanged();
}
}
public void refreshFragment(String apiLinks, int apiType){
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MatchesFragment fragment = new MatchesFragment();
Bundle args = new Bundle();
args.putString("ApiLink", apiLinks);
args.putString("apiType", String.valueOf(apiType));
fragment.setArguments(args);
fragmentTransaction.replace(R.id.linearfr, fragment);
fragmentTransaction.commit();
}
}