目前我使用的是ListFragment連同ExpandableListView顯示由SimpleCursorTreeAdapter支持的一些數據。一切正常,但我最近切換到support.v4包,使用ViewPager類在標籤之間滑動。滑動和所有其他類現在使用support.v4.Fragment工作正常,但我的ListFragment已停止工作。支持ListFragment問題
沒有拋出異常,但ListFragment根本不顯示任何項目。
這是ListFragment代碼:
public class VisuTextFragment extends ListFragment {
private Storage mStorage;
private int mFilterSensortype;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mStorage = Storage.newSQLiteDatabase(getActivity());
mFilterSensortype = -1;
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.l_visu_text, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
fillData();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.textvis, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_filter:
final Dialog dialog = new Dialog(getActivity());
dialog.setTitle("Filter by sensor type");
dialog.setContentView(R.layout.l_dialog_filter);
Button ok = (Button) dialog.findViewById(R.id.filter_ok);
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int filter = Integer.parseInt(((EditText) dialog.findViewById(R.id.et_filter)).getText().toString());
mFilterSensortype = filter;
fillData();
dialog.dismiss();
}
});
Button cancel = (Button) dialog.findViewById(R.id.filter_cancel);
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
}
});
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
dialog.show();
break;
}
return true;
}
@Override
public void onResume() {
super.onResume();
fillData();
}
public void fillData() {
Log.d("VisuTextFragment", "fillData()");
Cursor cursor;
if (mFilterSensortype == -1)
cursor = mStorage.queryAllAsCursor();
else
cursor = mStorage.query(mFilterSensortype);
TextVisCursorAdapter adapter = new TextVisCursorAdapter(
getActivity(),
cursor,
R.layout.l_visu_text_group,
new String[] { Storage.ELEMENT_ID, Storage.ELEMENT_ENTRIES_DATE, Storage.ELEMENT_ENTRIES_LATITUDE, Storage.ELEMENT_ENTRIES_LONGITUDE, Storage.ELEMENT_ENTRIES_SENSORTYPE },
new int[] { R.id.id, R.id.date, R.id.latitude, R.id.longitude, R.id.sensortype },
R.layout.l_visu_text_child,
new String[] { Storage.ELEMENT_MEASUREMENTS_VALUE },
new int[] { R.id.value });
ListView lv = (ListView) getListView();
ExpandableListView elv = (ExpandableListView) lv;
elv.setGroupIndicator(null);
elv.setAdapter(adapter);
}
}
這是我使用(不知道有沒有什麼幫助)的佈局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/id"/>
<TextView
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="@string/date"/>
<TextView
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="@string/latitude"/>
<TextView
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="@string/longitude"/>
<TextView
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/sensortype"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ExpandableListView android:id="@+id/android:list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:transcriptMode="normal"/>
<TextView android:id="@+id/android:empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/no_entries"/>
</LinearLayout>
</LinearLayout>
僅供參考:本顯示佈局文件中的TextView,但列表本身只是丟失。甚至沒有顯示空列表的TextView。
希望你能幫上忙。
編輯:我已通過其相應的方法檢查了ExpandableListView
的寬度和高度,並且都返回了0的值。它的getCount()
方法返回347.因此,視圖肯定存在並被正確填充,但它適用於某些奇怪的原因只是沒有畫到屏幕上。
EDIT2:好的,我解決了這一問題。問題是,該託管在實際列表頂部的TextViews
的LinearLayout
有其layout_height
屬性設置爲fill_parent
,這奇怪的是對於非支持版本的任何問題以及Eclipse中的作曲家,因爲它們都工作這種方式和我甚至沒有注意到它被設置爲fill_parent
。
是的,我之前使用了@android:id/list,然後看到了@ + id/android:list在其他地方,並試圖看看它是否有所作爲。我仍然使用ListFragment,因此如果沒有數據,它會自動在列表本身和「空白」視圖之間切換。 – minh
只是爲了確保我從片段擴展而不是ListFragment,但問題仍然存在。 – minh
你能確認你正在看到@ string/no_entries,實際上你在第一個LinearLayout中使用fill_parent嗎? –