2014-09-17 4 views
0

Я новичок в программировании на андроид. Я реализую функциональность для сканирования определенного Item Item и поиска штрих-кода, если он уже существует в ArrayList. Если он существует, я заменяю текущий фрагмент сканирования фрагментом InvnetoryFound, в котором у меня есть опция для обновления количества и полного удаления элемента из ArrayList.Фрагмент, показывающий старые данные

Проблема, с которой я столкнулся, после удаления инвентаря при повторном сканировании для другого штрих-кода Inventory после успешного сканирования показывает InventoryFound Fragment со старыми данными, которые были удалены из ArrayList. Ниже мой код:

Test ArrayList Код:

public static String[] inve = new String[5]; 
public static ArrayList<String[]> inventory_list = new ArrayList<String[]>(); 

    inve[0] = "INV45879"; 
    inve[1] = "Bridge Support Pipe"; 
    inve[2] = "Pre-insulated pipe supports provide both support and insulation in hot and cold piping applications.Pre-insulated pipe supports provide both support and insulation in hot and cold piping applications."; 
    inve[3] = "0885370720679"; 
    inve[4] = "2"; 

    inventory_list.add(inve); 

    inve = new String[5]; 

    inve[0] = "INV45880"; 
    inve[1] = "Cement"; 
    inve[2] = "Pre-insulated pipe supports provide both support and insulation in hot and cold piping applications"; 
    inve[3] = "9771234567003"; 
    inve[4] = "8"; 

    inventory_list.add(inve); 

Если сканирование успешно вызывается ниже функции, чтобы заменить фрагмент:

private static void showFragment(Fragment fragment, String back_option) { 

    try { 
     // start transition 
     FragmentTransaction ft = activity.getFragmentManager().beginTransaction(); 

     //if fragment Inventory is found then pass data to fragment 
     if(back_option.equals("inventoryFound")){ 

      //sends found inventory list data to fragment 

      String[] inv_data = inventory_list.get(inventory_index); 
      Bundle bundle = new Bundle(); 
      bundle.putStringArray("inventory_data",inv_data); 
      bundle.putInt("inventory_index",inventory_index); 
      inventoryFoundFragment.setArguments(bundle); 

      back_option = "null"; 


     // replace fragment 
     if (!back_option.equals("null")) // with back option 
      ft.replace(R.id.frag_content, fragment).addToBackStack(back_option); 
     else // no back option 
      ft.replace(R.id.frag_content, fragment); 

     // commit 
     ft.commit(); 
    } 
    catch(Exception e){ 
     out("PROBLEM SHOWING FRAGMENT!!!"+e.getMessage()); 
    } 
} 

фрагмент InventoryFound заполняющий данных и работает отлично. Ниже приведен код, когда я нажимаю на Remove заселенной Inventory:

public void removeInventory(){ 
    Shared.inventory_list.remove(inventory_index); 
    Toast.makeText(mContext,"Inventory "+inventory_index+" Removed Successfully!", Toast.LENGTH_SHORT).show(); 

    FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); 
    ft.remove(this); 
    ft.replace(R.id.frag_content, new ScanFragment()); 
    ft.commit(); 
} 

Он успешно удаление, но когда я проверить его еще раз, например, для штрих-кода «0885370720679» он показывает предыдущие данные об фрагменте InventoryFound. Я отлаживал его в Logcat (Log.d), и я могу видеть правильные данные, но он не отображается в фрагменте.

любые предложения или рекомендации будут оценены.

ответ

0

Я нашел решение этой проблемы.

Когда Фрагмент находится на переднем плане, он вызывает методResume(). В этом методе я вызываю пользовательскую функцию, которая переустанавливает данные для полей Фрагмент. Я не знаю, правильно ли это исправить эту проблему, но теперь она работает для меня!

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