我有一個ListView,顯示用戶從活動內動態生成的數組。基本上,該程序是一個計時器,用戶可以選擇一個他們想要報警發生的時間,並提供關於當該報警發生時應該做什麼的描述。Android ListView:當不顯示TextView時爲空
我有ListView設置使用SimpleAdapter調用一個alarm_list_item.xml,其中包含兩個TextView的和我想顯示列表中的每個項目的圖標。
adapter = new AlarmListAdapter(this, stringArray, R.layout.alarm_list_item, new String[] {"name", "alert"}, new int[] {R.id.ListViewItem, R.id.ListViewItemSub});
當用戶選擇不添加自定義對話框,我想設置的TextView的知名度alarm_list_item.xml到GONE所以它不會顯示爲名單上的空白區域報警。當我嘗試從活動中設置此參數時,我得到一個NullPointerException,因爲我假設xml文件實際上不是一個對象,但或多或少只是用作ListView的引用。有沒有辦法做到這一點?
到目前爲止,我通過將文本設置爲「沒有自定義通知集」來解決問題,但我希望有一個更清潔的選項,並在不使用時將它們全部刪除。
alarm_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageView
android:src="@drawable/alarm_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginLeft="10dp">
</ImageView>
<LinearLayout
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView
android:id="@+id/ListViewItem"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textSize="16sp">
</TextView>
<TextView
android:id="@+id/ListViewItemSub"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textSize="10sp">
</TextView>
</LinearLayout>
片段,其中的ListView駐留的活性:
stringArray = new ArrayList<HashMap<String, String>>();
list = (ListView)findViewById(R.id.AlarmListView);
adapter = new AlarmListAdapter(this, stringArray, R.layout.alarm_list_item, new String[] {"name", "alert"}, new int[] {R.id.ListViewItem, R.id.ListViewItemSub});
list.setAdapter(adapter);
registerForContextMenu(list);
}
private void updateListArray(){
stringArray.clear();
if(!arrayList.isEmpty()){
for(int i=0; i<arrayList.size(); i++){
String name = arrayList.get(i).getName();
String alert = arrayList.get(i).getAlertDialog();
if(alert == ""){
alert = "No Custom Notification Set";
}
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", name);
map.put("alert", alert);
stringArray.add(map);
}
}
}
適配器代碼:
public AlarmListAdapter(Context context, ArrayList<HashMap<String, String>> list, int textViewResourceId, String[] fields, int[] textViewId) {
super(context, list, textViewResourceId, fields, textViewId);
this.list = list;
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.alarm_list_item, null);
Log.i("getView = ", "" + v);
Log.i("list alert = ", "" + list.get(position).get("alert"));
}
if(list.get(position).get("alert") == null){
v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
}
return super.getView(position, convertView, parent);
}
public void forceReload(){
notifyDataSetChanged();
}
logcat的錯誤:
07-11 12:16:23.543: ERROR/AndroidRuntime(190): Uncaught handler: thread main exiting due to uncaught exception
07-11 12:16:23.573: ERROR/AndroidRuntime(190): java.lang.NullPointerException
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.AbsListView.obtainView(AbsListView.java:1275)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.ListView.measureHeightOfChildren(ListView.java:1147)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.ListView.onMeasure(ListView.java:1060)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.View.measure(View.java:7703)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:619)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.onMeasure(LinearLayout.java:280)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.View.measure(View.java:7703)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.measureVertical(LinearLayout.java:350)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.View.measure(View.java:7703)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.measureVertical(LinearLayout.java:350)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.View.measure(View.java:7703)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.View.measure(View.java:7703)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.measureVertical(LinearLayout.java:464)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.View.measure(View.java:7703)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.View.measure(View.java:7703)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.ViewRoot.performTraversals(ViewRoot.java:747)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.view.ViewRoot.handleMessage(ViewRoot.java:1613)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.os.Handler.dispatchMessage(Handler.java:99)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.os.Looper.loop(Looper.java:123)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at android.app.ActivityThread.main(ActivityThread.java:4203)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at java.lang.reflect.Method.invokeNative(Native Method)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at java.lang.reflect.Method.invoke(Method.java:521)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
07-11 12:16:23.573: ERROR/AndroidRuntime(190): at dalvik.system.NativeStart.main(Native Method)
由於單元格的重用,你需要放一個'else'子句讓它再次可見。 – Borja