Android: Listview se duplica cuando inicie una nueva actividad y presiona atrás para volver a ella

Tengo dos vistas de la lista que son fragmentos en las lengüetas del paginador de la visión. Al hacer clic en los elementos de la vista de lista, se inicia una nueva actividad. Pero cuando presiono el botón de retroceso para volver a la vista de lista con pestañas, la vista de lista se ha duplicado y si abro la actividad y vuelvo a repetirla se duplica otra vez y seguirá haciéndolo. También tengo otra vista tabulada de la lista con cinco lengüetas y cuando voy dos lengüetas lejos de una de las vistas. Los elementos en esa vista doble cuando vuelvo a ellos y esto es lo mismo para todas las otras pestañas. El código de las dos vistas de lista es idéntico. He intentado list.clear (), que sólo borra todos los elementos de la lista y han jugado con la declaración "else" en el titular de la vista (recomendado por otras respuestas de desbordamiento de la pila). Pero cada vez que la vista de lista todavía duplica. También a menos que usted no ha notado ya soy bastante nuevo para Android.

Aquí está el código para el fragmento de vista de lista (Due_Today_Fragment) que está en una actividad de dos pestañas.

import java.util.ArrayList; import java.util.List; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class Due_Today_Fragment extends Fragment { private List<homeworkdue> myhomeworkdue; static class ViewHolder { public ImageView imageView; public TextView HomeworkDueText; public TextView DescriptionText; public TextView TeacherText; } public static final String KEY_HOMEWORK="homework"; public static final String KEY_DESC="desc"; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ return inflater.inflate(R.layout.activity_main, container, false); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); myhomeworkdue = new ArrayList<homeworkdue>(); populatehomeworkdueList(); populateListView(); registerClickCallback(); } private void registerClickCallback() { ListView list = (ListView)getView().findViewById(R.id.listView1); list.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) { homeworkdue clickedhomeworkdue = myhomeworkdue.get(position); Intent intent = new Intent(getActivity(), homeworkdueDetailsActivity.class); intent.putExtra(KEY_HOMEWORK, clickedhomeworkdue.getHomeworkdue()); intent.putExtra(KEY_DESC, clickedhomeworkdue.getDesciption()); startActivity(intent); } }); } private void populatehomeworkdueList() { myhomeworkdue.add(new homeworkdue("History Homework", "Description 1", R.drawable.global_studies, "Anderson")); myhomeworkdue.add(new homeworkdue("Math Homework", "Description 2", R.drawable.mathematics, "Klein")); myhomeworkdue.add(new homeworkdue("English Homework", "Description 3", R.drawable.english, "Reed")); myhomeworkdue.add(new homeworkdue("Spanish Homework", "Description 4", R.drawable.spanish, "Joya")); myhomeworkdue.add(new homeworkdue("Science Homework", "Description 5", R.drawable.science, "Poole")); } private void populateListView() { ArrayAdapter<homeworkdue> adapter = new MyListAdapter(); ListView list = (ListView)getView().findViewById(R.id.listView1); list.setAdapter(adapter); } public class MyListAdapter extends ArrayAdapter<homeworkdue> { public MyListAdapter() { super(getActivity(), R.layout.item_view, myhomeworkdue); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView==null){ convertView = getActivity().getLayoutInflater().inflate(R.layout.item_view, parent, false); holder = new ViewHolder(); holder.imageView = (ImageView)convertView.findViewById(R.id.item_iconclass); holder.HomeworkDueText = (TextView) convertView.findViewById(R.id.item_texthomeworkdue); holder.DescriptionText = (TextView) convertView.findViewById(R.id.item_textdescription); holder.TeacherText = (TextView) convertView.findViewById(R.id.item_textteacher); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } homeworkdue currenthomeworkdue = myhomeworkdue.get(position); holder.imageView.setImageResource(currenthomeworkdue.getIconID()); holder.HomeworkDueText.setText(currenthomeworkdue.getHomeworkdue()); holder.DescriptionText.setText(currenthomeworkdue.getDesciption()); holder.TeacherText.setText(currenthomeworkdue.getTeacher()); return convertView; } } } 

Este es el código de la actividad que se inicia cuando se hace clic en un elemento de vista de lista

  import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.widget.TextView; import static com.bernard.beaconportal.Due_Today_Fragment.KEY_HOMEWORK; import static com.bernard.beaconportal.Due_Today_Fragment.KEY_DESC; public class homeworkdueDetailsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_details); String homework = ""; String desc = ""; Intent intent = getIntent(); if (null != intent) { homework = intent.getStringExtra(KEY_HOMEWORK); desc = intent.getStringExtra(KEY_DESC); } TextView headlineTxt = (TextView) findViewById(R.id.texthomeworkdue); headlineTxt.setText(homework); TextView pubdateTxt = (TextView) findViewById(R.id.textdescription); pubdateTxt.setText(desc); } } 

Aquí está el código para el fragmento de pestañas

 import java.lang.reflect.Field; import com.actionbarsherlock.app.SherlockFragment; import com.astuetz.PagerSlidingTabStrip; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragments2 extends SherlockFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.viewpager_main, container, false); // Locate the ViewPager in viewpager_main.xml ViewPager pager = (ViewPager) view.findViewById(R.id.viewPager); // Set the ViewPagerAdapter into ViewPager pager.setAdapter(new ViewPagerAdapter(getChildFragmentManager())); PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) view.findViewById(R.id.pagerTabStrip); tabs.setViewPager(pager); return view; } @Override public void onDetach() { super.onDetach(); try { Field childFragmentManager = Fragment.class .getDeclaredField("mChildFragmentManager"); childFragmentManager.setAccessible(true); childFragmentManager.set(this, null); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } } 

Aquí es donde las cuerdas se definen para la tarea debida

 public class homeworkdue { private String homework; private String desc; private int IconID; private String teacher; public homeworkdue(String homework, String desc, int IconID, String teacher) { super(); this.homework = homework; this.desc = desc; this.IconID = IconID; this.teacher = teacher; } public String getHomeworkdue() { return homework; } public String getDesciption() { return desc; } public int getIconID() { return IconID; } public String getTeacher() { return teacher; } } 

Aquí está el código para el fragmento que está contenido en cinco pestañas

 import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class Thursday extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ return inflater.inflate(R.layout.schedule_list_view, container, false); } private List<schedule> myschedule = new ArrayList<schedule>(); static class ViewHolder { public TextView HomeworkDueText; } public void onStart() { super.onStart(); populatescheduleList(); populateListView(); } private void populatescheduleList() { myschedule.add(new schedule("E Band")); myschedule.add(new schedule("G Band")); myschedule.add(new schedule("F Band")); myschedule.add(new schedule("H Band")); myschedule.add(new schedule("A Band")); myschedule.add(new schedule("C Band")); myschedule.add(new schedule("D Band")); } private void populateListView() { ArrayAdapter<schedule> adapter = new MyListAdapter(); ListView list = (ListView)getView().findViewById(R.id.listView2); list.setAdapter(adapter); } public class MyListAdapter extends ArrayAdapter<schedule> { public MyListAdapter() { super(getActivity(), R.layout.item_view, myschedule); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView==null){ convertView = getActivity().getLayoutInflater().inflate(R.layout.schedule_list_item, parent, false); holder = new ViewHolder(); holder.HomeworkDueText = (TextView) convertView.findViewById(R.id.bandText); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } schedule currenthomeworkdue = myschedule.get(position); holder.HomeworkDueText.setText(currenthomeworkdue.Band()); return convertView; } } } 

Aquí es donde las cadenas se definen para el horario

 public class schedule { private String band; public schedule(String band) { super(); this.band = band; } public String Band() { return band; } } 

Si necesita más información solo pregunte y gracias de antemano por la ayuda

He estado tratando de arreglar este error durante dos días y estoy en mi ingenio final.

La razón detrás de que estamos declarando una nueva lista una vez que se crea el fragmento, por lo que cuando regrese a su fragmento no va a declarar una nueva, en su lugar se utilizará la antigua. Por lo que para abordar este problema es necesario dividir el código siguiente en 2 partes:

 private List<homeworkdue> myhomeworkdue = new ArrayList<homeworkdue>(); 

Parte va en onResume en su fragmento que usted necesita también para quitar onStart y todo en onStart a onResume . Pero primero mantenga la declaración como esta:

 private List<homeworkdue> myhomeworkdue; 

Y mover el resto a onResume .

 @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); myhomeworkdue = new ArrayList<homeworkdue>(); populatehomeworkdueList(); populateListView(); registerClickCallback(); } 

Mismo problema en su segundo ListView ya que son idénticos.

Espero que esto funcione para usted. Por favor déme una regeneración si trabajó.

O simplemente simplemente llame al método clear() ; Sin ella, permanece constantemente ahí mientras llama a nuevos datos.

  • Fijas fijas en nuevo diseño de material android
  • ¿Por qué aparece el teclado después de TabBar?
  • Cómo actualizar el contenido de la ficha de fragmento en el botón de clic
  • RecyclerView onBindViewHolder sólo se llama una vez dentro del diseño de la pestaña
  • Android | Detener TabLayout recargar / actualizar mis fragmentos
  • Design Library TabLayout, el indicador de tabulación rebotando después de desplazarse
  • Android ViewPager con la pestaña que no mantiene el estado tras la rotación de la pantalla
  • Android ViewPager obtiene la vista actual
  • Fragmentos dentro de las pestañas del fragmento
  • Cambiar el color de las pestañas de navegación mediante programación
  • No se puede utilizar las pestañas con Sherlock
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.