2013-06-18 38 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

相关问题