onCreateView ListView为空。物品丢失

时间:2014-04-06 11:20:20

标签: android listview android-fragments android-listview

解决。请参阅下面的singularhum的答案。


我有一个指向片段的滑动菜单选项。此片段使用onCreateView使布局膨胀。我在onActivityCreated中更新了列表的值。这是我的来源。

我的列表视图 Pic

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结果是空的。 看图像。 如您所见,调试器还具有适配器的某些值。 enter image description here

以下是相关的MiniQuoteView类和XML

http://pastebin.com/rRpRA30L http://pastebin.com/YajCCqdJ

1 个答案:

答案 0 :(得分:1)

我认为您的问题出在fillData课程的MiniQuoteView方法中。

您的第一个if声明是:

if (this.quote == null)

但是当else对象非空时,您没有else ifquote语句。

然后,如果您在第一个语句中查看第二个if语句(读取quote数据并设置为视图),则为:

if (this.quote.name != null)

永远不会成立,因为quoteif内为空。这就是为什么你没有在列表视图中看到任何东西,因为没有设置任何东西显示。

所以它应该是这样的:

if (this.quote == null) {
    // displaying your not available message
} else if (this.quote.name != null){
    // your code to display the data
}