我已經搜索了這些論壇近3個小時,並看到幾個類似的問題,但沒有答案適合我。Listview數據模型已更新,但項目不顯示
我有一個活動,有幾個卡片視圖。其中一個卡片視圖具有帶字符串值和非常簡單的ListView的微調器。用戶從微調器中選擇1到12之間的值。然後,ListView應該根據微調器列表中的位置顯示與所選值相等的字符串數。例如,用戶選擇微調列表中的第二項,並且ListView顯示2個字符串。我有一個自定義適配器的列表視圖。 ListView本身最初顯示一行,這是正確的。但是,用戶從微調器中選擇一個值後,listview不顯示額外的行,它仍然只顯示一行。 ListView的數據來自ArrayList。在用戶選擇一個值並且它具有正確數量的條目後,我已經檢查了適配器的數據模型,就像ArrayList本身一樣,但無論我嘗試ListView本身仍然只顯示第一行。我試過NotifyDataSetChanged和Invalidate的每一個變種都沒有成功。
的各種代碼示例:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (parent == spDoseFrequency){
Toast.makeText(this,String.valueOf(position),Toast.LENGTH_SHORT).show();
rebuildReminderTimesList(position + 1);
}
}
private void rebuildReminderTimesList(int numberOfTimes){
Toast.makeText(this,"yup",Toast.LENGTH_SHORT).show();
//reset selected item to position 1
myApp.iSelectedReminderTimeIndex = 0;
//clear array and list, then rebuild with hourly timeslots
iarrTimes = new int[numberOfTimes][2];
liReminderTimes.clear();
int startTime = 8;
for (int i = 0; i < numberOfTimes; i++){
iarrTimes[i][0] = startTime + i;
iarrTimes[i][1] = 0;
liReminderTimes.add(pad(startTime + i) + ":00");
}
//refresh the listview
myAdapter.notifyDataSetChanged();
}
public class ReminderListAdapter extends ArrayAdapter {
List<String> liTimes;
Context ctx;
LayoutInflater inf;
public ReminderListAdapter(Context ctx, List<String> liTimes) {
super(ctx, R.layout.reminder_time_listview, liTimes);
this.liTimes = liTimes;
this.ctx = ctx;
inf = LayoutInflater.from(ctx);
}
public void setLiTimes(List<String> liTimes){
this.liTimes = liTimes;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder viewHolder;
if (view == null){
view = inf.inflate(R.layout.reminder_time_listview,parent,false);
viewHolder = new ViewHolder();
viewHolder.sTime = (TextView) view.findViewById(R.id.tvTime);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.sTime.setText(liTimes.get(position));
return view;
}
private static class ViewHolder{
TextView sTime;
}
}
任何幫助,將不勝感激,因爲這是推動我瘋了。
對此問題的快速更新:我剛剛測試了提供多個值的初始列表,但即使此時它只顯示第一個項目。在CardView對象內使用ListView可能有問題嗎?我所有其他的卡都能正常工作,只有ListView無法正常顯示。
此外,我已經嘗試修改代碼,以便不改變列表中元素的數量,它只是改變第一個元素的字符串中的文本,這工作正常。所以notifyDataSetChanged似乎正在工作,但它不會顯示多個項目。對Adapter.getCount()方法的快速檢查也會返回正確數量的元素,但不會顯示它們。
最初我嘗試使用簡單的標準適配器,而不是自定義的適配器,因爲它只需要顯示一個字符串。這具有相同的特徵。然後我使用自定義適配器重建它,但無濟於事。自定義適配器代碼現在添加到發佈。我也嘗試過首先擴展BaseAdapter,然後再擴展ArrayAdapter。 – SchonWieder