2013-04-29 61 views
0

我试图在DataListFragment(扩展ListFragment)中显示新数据。这是我如何做这里面MainActivity:未显示ListFragment数据

  CustomArrayAdapter adapter = new CustomArrayAdapter(this); 
      adapter.setData1(newContent); 
      adapter.notifyDataSetChanged(); 
      ToFragment.changeAdapter(adapter); 

CustomArrayAdapter样子:

public class CustomArrayAdapter extends ArrayAdapter<FinalData> { 
    private final LayoutInflater mInflater; 

    public CustomArrayAdapter(Context context) { 
     super(context, android.R.layout.simple_list_item_2); 
     mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public void setData1(ArrayList<FinalData> data) { 
     System.out.println("chch"); 
     clear(); 
     System.out.println("chch"); 
     if (data != null) { 
      for (FinalData appEntry : data) { 
       add(appEntry); 
       System.out.println("chch"); 
      } 
     } 
    } 

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

     if (convertView == null) { 
      view = mInflater.inflate(R.layout.single_item, parent, false); 
     } else { 
      view = convertView; 
     } 

     FinalData item = getItem(position); 
     if (position % 2 == 0) { 
      ((TextView)view.findViewById(R.id.train_info)).setEllipsize(TruncateAt.MARQUEE); 
      ((TextView)view.findViewById(R.id.train_info)).setSelected(true); 
      ((TextView)view.findViewById(R.id.stations_info)).setEllipsize(TruncateAt.MARQUEE); 
      ((TextView)view.findViewById(R.id.stations_info)).setSelected(true); 
      ((TextView)view.findViewById(R.id.stations_info)).setText(item.getFullData()); 
      ((AutoResizeTextView)view.findViewById(R.id.time_info)).setText(item.getShortData()); 
      ((TextView)view.findViewById(R.id.train_info)).setText(item.getTimeData()); 

      ((TextView)view.findViewById(R.id.train_info)).setBackgroundColor(Color.parseColor("#6dcaec")); 
      ((TextView)view.findViewById(R.id.stations_info)).setBackgroundColor(Color.parseColor("#a8dff4")); 
      ((AutoResizeTextView)view.findViewById(R.id.time_info)).setBackgroundColor(Color.parseColor("#6dcaec")); 
     } else { 
      ((TextView)view.findViewById(R.id.train_info)).setEllipsize(TruncateAt.MARQUEE); 
      ((TextView)view.findViewById(R.id.train_info)).setSelected(true); 
      ((TextView)view.findViewById(R.id.stations_info)).setEllipsize(TruncateAt.MARQUEE); 
      ((TextView)view.findViewById(R.id.stations_info)).setSelected(true); 
      ((TextView)view.findViewById(R.id.stations_info)).setText(item.getFullData()); 
      ((AutoResizeTextView)view.findViewById(R.id.time_info)).setText(item.getShortData()); 
      ((TextView)view.findViewById(R.id.train_info)).setText(item.getTimeData()); 

      ((TextView)view.findViewById(R.id.train_info)).setBackgroundColor(Color.parseColor("#cf9fe7")); 
      ((TextView)view.findViewById(R.id.stations_info)).setBackgroundColor(Color.parseColor("#ddbcee")); 
      ((AutoResizeTextView)view.findViewById(R.id.time_info)).setBackgroundColor(Color.parseColor("#cf9fe7")); 
     } 
     return view; 
    } 
} 

而且DataListFragment样子:

public class DataListFragment extends ListFragment { 
    CustomArrayAdapter mAdapter; 
    public CustomArrayAdapter getAdapter() { 
     return mAdapter; 
    } 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setEmptyText(""); 
     mAdapter = new CustomArrayAdapter(getActivity()); 
     mAdapter.notifyDataSetChanged(); 
     setListShown(true); 
    } 
    public void changeAdapter(CustomArrayAdapter adapter) { 
     mAdapter = adapter; 
     setListAdapter(adapter); 
     mAdapter.notifyDataSetChanged(); 
     setListShown(true); 
    } 
    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
    } 
} 

我相信newContent不是空的,但列表没有改变,它仍然是空的,没有看到任何东西。该怎么做?

UPD:我设法让我的程序就行了

setListShown(true); 

它只是没有错误,并停止后,不要做任何停止。这是神秘...

+0

您在*'changeAdapter()'之前调用'notifyDataSetChanged()'*,因此不会通知Fragment。 – 2013-04-29 14:49:54

回答

1

要调用notifyDataSetChanged()changeAdapter()之前,所以Fragment不会更改的通知。您应该创建一个适配器实例,并且只需拨打setListAdapter()一次(最有可能在片段的onCreate()中)。然后从您的活动中随时拨打ToFragment.getListAdapter().notifyDataSetChanged()