2013-06-18 32 views
0

我正在開發Android項目。在擴展FragmentActivity的我的OrderPage類中,我列出了我的產品。在我擴展ListFragment的PositionsFragment類中,我實現了List,它不想刷新。即使當我使用notifyDataSetChanged時,我的ListFragment中的ArrayAdapter也不會刷新

我添加方法validatePositionsList應該:從OrderPage獲取我的產品列表,然後再次寫入我的字符串表稱爲arrr並調用notifyDataSetChanged刷新List。最後一步不行。我檢查了一切,唯一的問題是我的ListFragment不會刷新。我刷新它錯了嗎?

public class PositionsFragment extends ListFragment { 

    static ArrayAdapter la; 
    static List<String> positionsString; 
    static String[] arrr; 
    int fragNum; 

    public static PositionsFragment init(int val) { 
     positionsList = new PositionsFragment(); 

     // Supply val input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("val", val); 
     positionsList.setArguments(args); 
     validatePositionsList(); 
     return positionsList; 
    } 

    /** 
    * Retrieving this instance's number from its arguments. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     fragNum = getArguments() != null ? getArguments().getInt("val") : 1; 
    } 

    /** 
    * The Fragment's UI is a simple text view showing its instance number and 
    * an associated list. 
    */ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     validatePositionsList(); 
     View layoutView = inflater.inflate(R.layout.fragment_order_list_positions, 
       container, false); 
     View tv = layoutView.findViewById(R.id.text); 
     ((TextView) tv).setText("Pozycje zamówienia"); 
     return layoutView; 
    } 

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

     la = new ArrayAdapter<String>(getActivity(), 
       android.R.layout.simple_list_item_1, arrr); 
     la.notifyDataSetChanged(); 
     setListAdapter(la); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     Log.i("Truiton FragmentList", "Item clicked: " + id); 
    } 

    public static void validatePositionsList() { 
     tempMyProducts = OrderPage.getProducts(); 
     positionsString = new ArrayList<String>(); 
     positionsString.add("mm"); 
     for(myProduct obj : tempMyProducts) 
     { 
      Log.e("validatePositionsList", String.valueOf(obj.getNazwa())); 
      positionsString.add("mm"); 
     } 
     arrr = Arrays.copyOf(positionsString.toArray(),positionsString.toArray().length,String[].class); 
     if(la!=null) 
      { 
      la.notifyDataSetChanged(); 
      Log.e("validatePositionsList", "Odswiezam"); 
      } 
    } 

} 
+0

這樣做'arrr ='要更改的參考和你的適配器不再更新。 – nattyddubbs

回答

0

我認爲你正在改變數組,但這些改變不會影響適配器的內部列表。 試試下面的代碼:

arrr = Arrays.copyOf(positionsString.toArray(),positionsString.toArray().length,String[].class); 
     if(la!=null) 
      { 
      la.clear(); 
      for (int i = 0; i < arrr.length; i++) 
       la.add(arrr[i]); 
      la.notifyDataSetChanged(); 
      Log.e("validatePositionsList", "Odswiezam"); 
      } 
+0

la.addAll拋出java.lang.UnsupportedOperationException – boski

+0

再試一次 - 我更新了文章 – Dimmerg

+0

它甚至在la.clear()上拋出異常。 :( – boski

相關問題