解决。请参阅下面的singularhum的答案。
我有一个指向片段的滑动菜单选项。此片段使用onCreateView
使布局膨胀。我在onActivityCreated
中更新了列表的值。这是我的来源。
我的列表视图
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
this.dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm", Locale.getDefault());
this.portfolio = new Portfolio();
this.portfolio.addCompanyNoUpdate("YHOO");
// Specify the fragment layout file for this fragment class
View view = inflater.inflate(R.layout.fragment_stock, container, false);
progressText = (TextView) view.findViewById(R.id.progressTextView);
// Assign our CursorAdapter
adapter = new QuoteAdapter(getActivity(), portfolio.getQuotes());
ListView list = (ListView) view.findViewById(R.id.list);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
return view;
}
然后我让onActivityCreated
进行更新。
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.update();
}
我的更新课程
private void update() {
// If a network connection is available, update the stock information
if (Utils.isNetworkAvailable(getActivity())) {
// Start a custom task that downloads the data on another thread so the UI does not lock up
new UpdateQuotesTask().execute(portfolio);
}
else {
// Otherwise display an error message to the user
this.progressText.setText(this.getResources().getString(R.string.no_internet_connection));
}
}
我的适配器
public class QuoteAdapter extends BaseAdapter {
private Context context;
private List<Quote> quotes;
public QuoteAdapter(Context c, List<Quote> quotes) {
this.context = c;
this.quotes = quotes;
}
public void addQuote(Quote q) {
this.quotes.add(q);
}
@Override
public int getCount() {
return this.quotes.size();
}
@Override
public Object getItem(int position) {
return this.quotes.get(position);
}
public long getItemId(int position) {
// We can just return a default value for this adapter
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MiniQuoteView miniQuoteView = new MiniQuoteView(this.context, this.quotes.get(position));
miniQuoteView.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.FILL_PARENT, ListView.LayoutParams.WRAP_CONTENT));
return miniQuoteView;
}
public void removeItem(int position) {
this.quotes.remove(position);
}
}
最后我的XML作为标准列表视图
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/progressTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/none" />
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:verticalSpacing="2dp"
android:layout_below="@+id/progressTextView" />
</RelativeLayout>
出于某种原因,我的Listview结果是空的。 看图像。 如您所见,调试器还具有适配器的某些值。
以下是相关的MiniQuoteView类和XML
答案 0 :(得分:1)
我认为您的问题出在fillData
课程的MiniQuoteView
方法中。
您的第一个if
声明是:
if (this.quote == null)
但是当else
对象非空时,您没有else if
或quote
语句。
然后,如果您在第一个语句中查看第二个if
语句(读取quote
数据并设置为视图),则为:
if (this.quote.name != null)
永远不会成立,因为quote
在if
内为空。这就是为什么你没有在列表视图中看到任何东西,因为没有设置任何东西显示。
所以它应该是这样的:
if (this.quote == null) {
// displaying your not available message
} else if (this.quote.name != null){
// your code to display the data
}