我有10个片段,每个片段都有ListView。我正在显示自定义适配器的数据。但ListView没有显示任何内容。示例: - 假设我在第4页并且有按钮。我点击它并从服务器获取一些数据,之后我使用自定义适配器。但数据未显示在ListView中。
我注意到,如果我将listview从onCreateView()替换为onActivityCreated()。有用。我能够在ListView上看到数据。但每个页面都更新为pageno-1的listview。 假设我在第5页并更新到listview。这里listno-5的listview没有显示数据。我看到它在第1页的列表视图中显示数据。
我认为,Fragment无法在所有页面中添加listview,因此每页都会显示数据。如果我在listiview中触摸获取错误,则在listview中添加数据后: -
04-30 16:03:40.120: W/AbsListView(8161): Intent to operate on non-exist data, childcount = 0,mFirstPosition = 0,adapter count = 0,action = 0,mActivePointerId = 0,mScrollY = 0,this = android.widget.ListView@42236718
04-30 16:03:40.159: W/AbsListView(8161): Intent to operate on non-exist data, childcount = 0,mFirstPosition = 0,adapter count = 0,action = 2,mActivePointerId = 0,mScrollY = 0,this = android.widget.ListView@42236718
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.scorecard_swing_items,
container, false);
swingListView = (ListView) mView.findViewById(R.id.swingListView);
return mView;
)
onActivityResult()
myAdapter adapter = new myAdapter(getActivity().getBaseContext(),
list);
swingListView.setAdapter(adapter);
adapter.notifyDataSetChanged();
答案 0 :(得分:1)
您是否正在添加和删除ListView?如果是这样,这是错误的方法。当新数据从服务器进入时,您需要在适配器上操作以刷新数据。像
这样的东西 function void onLoadFinished( List<?> myObjects )
{
this.adapter.clear();
this.adapter.addAll( myObjects );
}
这将立即清除列表并添加新数据。每次构建ListView都不是可行的方法。
此外,您可能应该考虑使用Loader框架,因为它将为您处理所有AsyncTask的内容。我使用a ADP's excellent examples here.
学习了模式另外,请确保您正在扩展ListFragment。如果是这样,您的布局中必须包含ListView
,其ID为@id/android:list
,然后只需在onCreateView
方法中进行设置即可。这是一个XML示例:
<!DOCTYPE android>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FFFFFFFF" >
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:cacheColorHint="#FDFFCE" />
<Spinner
android:id="@+id/location_spinner"
android:layout_width="56dp"
android:layout_height="1px"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:gravity="center"
android:textColor="#FF000000"
android:visibility="invisible" />
<Spinner
android:id="@+id/area_spinner"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/location_type_spinner"
android:gravity="center"
android:textColor="#FF000000"
android:visibility="invisible" />
</RelativeLayout>
然后视图在这里膨胀:
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState )
{
View view = inflater.inflate( R.layout.fragment_location_list, null );
return view;
}
我在onActivityCreated中执行所有其他设置和视图绑定:
@Override
public void onActivityCreated( Bundle savedInstanceState )
{
super.onActivityCreated( savedInstanceState );
setRetainInstance( true );
LayoutInflater.from( getActivity() );
getListView().setDividerHeight( 1 );
getListView().setOnCreateContextMenuListener( this );
getListView().setOnItemLongClickListener( this );
getListView().setFocusable( true );
getListView().setOnTouchListener( this );
.
.
.
}
这应该为您处理所有FragmentActivity生命周期事件。