2016-02-18 12 views
0

My BaseAdapter отлично работает, но когда я прокручиваю список, каждый элемент является двойным. Я не знаю, как я могу остановить это.Как остановить обновление списка при прокрутке?

Ниже представлен массив с сервера PHP. Сервер PHP отправляет это как строку json.

Array 
(
    [0] => Array 
     (
      [i] => 122:133:155:201:159:113:153:202:220:222:221:225:109 
      [j] => 8 
      [r] => 9a 
     ) 

    [1] => Array 
     (
      [i] => 205:182:221 
      [j] => 9 
      [r] => 10 
     ) 

    [2] => Array 
     (
      [i] => 
      [j] => 10 
      [r] => 11 
     ) 

    [3] => Array 
     (
      [i] => 101:102:132 
      [j] => 12 
      [r] => 13 
     ) 

) 

Это активность:

public class Strefa extends Activity { 

    AdapterStrefa mListAdapter; 

    ListView listview; 
    ArrayList<ListData> myList = new ArrayList<>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if(GlobalConfig.tryb) { 
      setTheme(R.style.AppTheme_Dark); 
      setContentView(R.layout.n_strefa); 
     } else { 
      //setContentView(R.layout.d_statystyki); 
     } 

     GlobalConfig config = new GlobalConfig(); 
     JSONArray JsonArray = config.getJsonArray(); 

     for (int i = 0; i < JsonArray.length(); i++) { 

      try { 
       JSONObject jsonObject = JsonArray.getJSONObject(i); 

       int r = jsonObject.getInt("j"); 

       ListData ld = new ListData(); 
       ld.setAdres(jsonObject.getString("i")); 
       ld.setStrefa(jsonObject.getString("r") + ":"); 
       myList.add(ld); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

     listview = (ListView) findViewById(R.id.listView); 

     mListAdapter = new AdapterStrefa(this, myList); 
     listview.setAdapter(mListAdapter); 

     /* Powrót */ 

     Button Back = (Button) findViewById(R.id.back); 

     Back.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       finish(); 

      } 
     }); 

    } 

} 

Это мой BaseAdaper:

public class AdapterStrefa extends BaseAdapter { 

    ArrayList myList = new ArrayList(); 
    LayoutInflater inflater; 
    Context context; 


    public AdapterStrefa(Context context, ArrayList myList) { 
     this.myList = myList; 
     this.context = context; 
     inflater = LayoutInflater.from(this.context); 
    } 

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

    @Override 
    public ListData getItem(int position) { 
     return (ListData) myList.get(position); 
    } 

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

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

     MyViewHolder mViewHolder; 

     if(convertView == null) { 

      if(GlobalConfig.tryb) { 
       convertView = inflater.inflate(R.layout.n_strefa_item, parent, false); 
      } else { 
       convertView = inflater.inflate(R.layout.d_zlecenia_lista, parent, false); 
      } 

      mViewHolder = new MyViewHolder(convertView); 
      convertView.setTag(mViewHolder); 

     }else { 

      mViewHolder = (MyViewHolder) convertView.getTag(); 

     } 


     ListData currentListData = getItem(position); 

     mViewHolder.strefa.setText(currentListData.getStrefa()); 
     mViewHolder.dzielnica.setText(currentListData.getDzielnica()); 
     //mViewHolder.layout.setText(currentListData.getAdres()); 


     String CurrentString = currentListData.getAdres(); 
     String[] separated = CurrentString.split(":"); 

     for(int i = 0; i < separated.length; i++) { 

      if(!separated[i].isEmpty()) { 
       Button button = new Button(context, null, android.R.attr.buttonStyleSmall); 
       button.setText(context.getString(R.string.string, separated[i])); 
       mViewHolder.layout.addView(button); 
      } 
     } 

     return convertView; 
    } 

    private class MyViewHolder { 
     TextView strefa, dzielnica; 
     LinearLayout layout; 

     public MyViewHolder(View item) { 
      strefa = (TextView) item.findViewById(R.id.strefa); 
      dzielnica = (TextView) item.findViewById(R.id.dzielnica); 
      layout = (LinearLayout) item.findViewById(R.id.layout); 
     } 
    } 
} 

Я хотел бы, чтобы каждый товар создавать кнопки из строки JSON. например Когда первый элемент массива json имеет строку: 205: 182: 221, нужно создать три кнопки в элементе. Когда я просматриваю список, каждый элемент двойной. Как я могу остановиться вдвое?

+0

Что вы подразумеваете под * каждый пункт двойной *? Также, пожалуйста, напишите код, в котором вы разбираете JSON и создаете адаптер. – Rohit5k2

+0

My BaseAdapter создает три кнопки, и это очень хорошо, если первый элемент jsonarray имеет строку: 205: 182: 221, но когда я просматриваю свой список, каждый элемент реплицирует данные, поэтому первый элемент имеет шесть кнопок, девять и т. Д. Это происходит всякий раз, когда я скрыть элемент списка, а затем отобразиться при прокрутке. – SeaDog

+0

Обратите внимание, что мой ответ работает на вас. – Rohit5k2

ответ

1

Добавить

mViewHolder.layout.removeAllViews(); 

непосредственно перед for цикла внутри getView() метода.

+0

Отлично! но почему мой другой список не реплицируется? В других адаптерах я не использую addView() только mViewHolder.XXX.setText (currentListData.getXXX()); влияет ли это? – SeaDog

+0

Если вы не используете 'addView', тогда все будет хорошо. – Rohit5k2

+0

ОК, но я должен создать динамически элементы. Вы знаете лучшее решение? – SeaDog

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

  • Нет связанных вопросов^_^