2016-12-21 5 views
0

это моя проблема: Во-первых у меня есть ListView, как это:Почему, когда я обновляю свой список, он дублирует?

image1

Когда я нажимаю на первом ряду (для expemple prod3) появляется мой подобный диалог (это для удаления щелкнули строки):

image2

Но когда я обновить мой фрагмент происходит эта вещь:

image3

Почему? есть функция типа «revalidate, repaint» (java) на Android?

Это мой код, когда я нажимаю на строке:

public void mostraProdotto(String tito){ 

    final EditText textprod; 
    final EditText prezzo; 

    Button btnConf; 
    Button btnDelete; 
    final Dialog dialogCustom = new Dialog(getActivity()); 

    dialogBuilder = new AlertDialog.Builder(getActivity()); 
    //process 

    dialogCustom.setContentView(R.layout.spesa_pagata); 
    dialogCustom.setTitle("Nome Prod"); 
    textprod = (EditText)dialogCustom.findViewById(R.id.textprod); 
    textprod.setText(tito); 
    prezzo = (EditText)dialogCustom.findViewById(R.id.txtprezzo); 
    btnConf = (Button)dialogCustom.findViewById(R.id.btnConf); 


    btnConf.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      String nomeprod = textprod.getText().toString(); 
      String strprezzo = prezzo.getText().toString(); 

      if(!nomeprod.isEmpty() && !strprezzo.isEmpty()) { 

     .............. 


       new getSpesa().execute(); //getSpesa is for see listview 
       dialogCustom.cancel(); 



     } 

     } 
    }); 

и это код для заполнения списка:

    listView = (ListView) rootView.findViewById(R.id.list_spesa); 
        listView.setY(20); 
        adapter = new CustomListAdapterSpesa(getActivity(), movieList); 
        adapter.notifyDataSetChanged(); 
        listView.setAdapter(adapter); 

EDIT:

это мой customadapter

public class CustomListAdapterSpesa extends BaseAdapter { 

private Activity activity; 

private LayoutInflater inflater; 
private List<MovieSpesa> movieItems; 

int pos; 
public CustomListAdapterSpesa(Activity activity, List<MovieSpesa> movieItems) { 
    this.activity = activity; 
    this.movieItems = movieItems; 
} 

@Override 
public int getCount() { 
    return movieItems.size(); 
} 

@Override 
public Object getItem(int location) { 
    return movieItems.get(location); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (inflater == null) 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.list_row, null); 


    TextView title = (TextView) convertView.findViewById(R.id.title); 

     TextView genre = (TextView) convertView.findViewById(R.id.genre); 
    convertView.findViewById(R.id.releaseYear); 

    MovieSpesa m = movieItems.get(position); 


    int coint = getCount(); 


    // title 
    title.setText(m.getTitle()); 



    // genre 


    genre.setText(m.getGenre()); 

    return convertView; 

} 

}

+0

Пожалуйста, добавьте пользовательский адаптер –

+0

Вероятно, элементы, добавленные в 'movieList' при обновлении ListView. просто очистите 'movieList' перед добавлением элементов на referh –

+0

А также как вы инициализируете movieList в коде –

ответ

1

Адаптер написан правильно, поэтому проблема может быть на стороне списка.

Вы писали этот код:

listView = (ListView) rootView.findViewById(R.id.list_spesa); 
listView.setY(20); 
adapter = new CustomListAdapterSpesa(getActivity(), movieList); 
adapter.notifyDataSetChanged(); 
listView.setAdapter(adapter); 

Проблема должна быть о том, как movieList используется, он должен имеет классовую сферу и не локальная область.

Так у вас есть два возможных решения:

  1. Используйте movieList.clear(); перед добавлением другого items. Этот метод очищает все элементы, предварительно добавленные. Таким образом, единственными элементами внутри списка станут вновь вставленные.
  2. Перед использованием вы можете просто проконсультировать list. (это означает локально) Таким образом, каждый раз, когда вы вызываете метод, заполняющий list, сам объект будет воссоздан.

Надеюсь, это поможет.

Смежные вопросы