이 문제에 대한 해결 방법을 찾을 수 없으며 문제점을 정확하게 표현하는 방법을 모릅니다. OpenWeather API를 사용하여 향후 7 일간 예측을합니다. 모든 네트워크 관련 작업을위한 별도의 클래스 및 결과를 sqlite 데이터베이스에 저장 한 다음 결과 문자열을 리사이클 뷰에 연결합니다. HTTP API를 자바 인터페이스로 바꾸기 위해 retrofit을 사용했습니다. 리사이클 뷰 어댑터를이 클래스에 전달했습니다. 내 MainFragment 군 수업에서 생성자는 정확하게 API에서 데이터를 얻을 수 있어요하지만, 다음 코드는이 기능은 비동기 retrofit.The f를 호출RecyclerView 어댑터가 모든 요소를 삭제할 수 없습니다.
@Override
public void onResponse(Call<OpenWeather> call, Response<OpenWeather> response) {
int code = response.code();
if (code == 200) {
OpenWeather openWeather = response.body();
String []result = getWeatherDataFromRetrofit(openWeather,postal);
if (mForecastAdapter != null) {
Log.e(LOG_TAG,""+mForecastAdapter.getItemCount());
for(int i=0;i<mForecastAdapter.getItemCount();i++){
mForecastAdapter.remove(i);
}
for(int i=0;i<result.length;i++) {
String dayForecastStr = result[i];
mForecastAdapter.add(i,dayForecastStr);
}
// New data is back from the server. Hooray!
}
} else {
Toast.makeText(mContext, "Did not work: " + String.valueOf(code), Toast.LENGTH_LONG).show();
}
}
제대로 작동하지 않습니다 또는 mForecastAdapter 요소를 제거하기 위해 사용되는 루프는 다음
public void add(int position, String item) {
mDataset.add(position, item);
Log.e("Add element:", item);
notifyItemInserted(position);
}
public void remove(int position) {
Log.e("Remove element:",mDataset.get(position));
mDataset.remove(position);
notifyItemRemoved(position);
}
휴지통보기 어댑터 기능을 중복 항목을 Heres
에게 제거를 포함하고 추가 할 목록을 완전히 실행되지 로그되어 내가 사용의 원인이되는 앱이
E/FetchWeatherTask: 0
E/Add element:: Sun, Jul 10 - Rain - 35/27
E/Add element:: Mon, Jul 11 - Rain - 32/27
E/Add element:: Tue, Jul 12 - Rain - 32/27
E/Add element:: Wed, Jul 13 - Rain - 35/27
E/Add element:: Thu, Jul 14 - Rain - 32/26
E/Add element:: Fri, Jul 15 - Rain - 33/27
E/Add element:: Sat, Jul 16 - Rain - 32/27
을 시작하면 내가 mForecastAdapter을 지우기 위해 사용하고 for 루프가 완전히
를 실행하지 않는 것을 보여주는 항목 내가 두 번째로 응용 프로그램을 갱신 처음
E/FetchWeatherTask: 7
E/Remove element:: Sun, Jul 10 - Rain - 35/27
E/Remove element:: Tue, Jul 12 - Rain - 32/27
E/Remove element:: Thu, Jul 14 - Rain - 32/26
E/Remove element:: Sat, Jul 16 - Rain - 32/27
E/Add element:: Sun, Jul 10 - Rain - 35/27
E/Add element:: Mon, Jul 11 - Rain - 32/27
E/Add element:: Tue, Jul 12 - Rain - 32/27
E/Add element:: Wed, Jul 13 - Rain - 35/27
E/Add element:: Thu, Jul 14 - Rain - 32/26
E/Add element:: Fri, Jul 15 - Rain - 33/27
E/Add element:: Sat, Jul 16 - Rain - 32/27
을위한 응용 프로그램을 새로 고치면
는
E/FetchWeatherTask: 10
E/Remove element:: Sun, Jul 10 - Rain - 35/27
E/Remove element:: Tue, Jul 12 - Rain - 32/27
E/Remove element:: Thu, Jul 14 - Rain - 32/26
E/Remove element:: Sat, Jul 16 - Rain - 32/27
E/Remove element:: Wed, Jul 13 - Rain - 35/27
E/Add element:: Sun, Jul 10 - Rain - 35/27
E/Add element:: Mon, Jul 11 - Rain - 32/27
E/Add element:: Tue, Jul 12 - Rain - 32/27
E/Add element:: Wed, Jul 13 - Rain - 35/27
E/Add element:: Thu, Jul 14 - Rain - 32/26
E/Add element:: Fri, Jul 15 - Rain - 33/27
E/Add element:: Sat, Jul 16 - Rain - 32/27
나는 요소를 제거하기 위해 사용 for 루프가 제대로 작동하지 않는 이유를 이해할 수 없습니다입니다 고급
솔루션에 .Thanks : -
int count = mForecastAdapter.getItemCount()
for(int i=0;i<count;i++){
mForecastAdapter.remove(i);
}
아니면이 제거에서 한 가지의 목록을 지울 수 있습니다()
public void remove() {
mDataset.clear();
notifyItemRemoved(position);
}
가 대신 notifyItemRemoved의하십시오 notifyDataSetChanged 사용해 볼 수 있습니까? – Swag
데이터를 삭제할 때'int i = mForecastAdapter.getItemCount() - 1; i> = 0; i -'가됩니다. 아니면 모든 항목을 지우라고 부르세요. – LordRaydenMK
그게 이상하지만 더 많은 코드가 문제를 찾으려면 필요합니다. 어쩌면 단지 배열을 비우고 "add"함수와 호출 할 때 notifydatasetchanged를 사용하여 "clear"를 사용할 수 있습니다.또는 항목이 실제로 처음부터 삭제되고 있는지 디버그하려고 시도하십시오. – Roee