Android 片段上的 ListView RSS Reader

Android ListView RSS Reader on a fragment

所以。 我在片段方面相当菜鸟,我花了最后几天尝试在一个有很多片段的应用程序中显示一个非常非常简单的 RSS Reader。 我正在遵循一个指南(实际上有很多指南,但这个是代码较少的指南.. 仅用于学习目的:http://www.html.it/pag/19519/android-e-le-applicazioni-di-rete/)。

这是关于片段的 xml,我将在其中显示 RSS Reader(称为 fragment_main.xml)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="#607D8B"
tools:context=".MainActivity$PlaceholderFragment"
android:id="@+id/main1">

<ImageView
    android:id="@+id/newsBanner1"
    android:layout_width="wrap_content"
    android:layout_height="120sp"
    android:layout_marginTop="0dp"
    android:gravity="top"
    android:layout_marginBottom="10dp"
    android:src="@drawable/news_banner"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="News:"
    android:id="@+id/newsTitleText1"
    android:textSize="20dp"
    android:textStyle="bold"
    android:layout_marginTop="140dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<ScrollView
    android:id="@+id/scrollerNews1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/newsTitleText1"
    android:layout_marginTop="8dp"
    android:scrollbars="vertical"
    android:fillViewport="true">

    <ListView
        android:id="@+id/rssListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</ScrollView>

是的,它有 "main1" ID,因为它是应用程序开头的 "default" 布局片段。 这是 java class

public class NewsFragment extends Fragment {

String feedUrl = "";
ListView rssListView = null;
ArrayList<RSSItem> RSSItems = new ArrayList<RSSItem>();
ArrayAdapter<RSSItem> array_adapter = null;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState){

    View setView = inflater.inflate(R.layout.fragment_main, container, false);

    feedUrl = "sample_feed_url";

    refreshRSSList();

    rssListView = (ListView) setView.findViewById(R.id.rssListView);

    array_adapter = new ArrayAdapter<RSSItem>(this.getActivity(), R.layout.fragment_main, RSSItems);
    rssListView.setAdapter(array_adapter);

    refreshRSSList();

    return setView;

}

private void refreshRSSList() {

    ArrayList<RSSItem> newItems = RSSItem.getRSSItems(feedUrl);
    RSSItems.clear();
    RSSItems.addAll(newItems);

}

在我 运行 应用程序的那一刻,除了列表视图(我猜它是空的)之外的所有内容都显示了。

非常感谢愿意帮助我的人:D

初始化数组适配器时,布局参数错误。您已经提到了片段的布局。这里问的是listview的布局。我的意思是列表视图中项目的布局。您需要在布局中创建一个新文件并将其命名为list_item.xml。定义 list_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical">
</TextView>

现在您的阵列适配器将是

array_adapter =new ArrayAdapter(getActivity(),R.layout.list_item,R.id.list_item_textview,rssItems);

您也可以使用您定义的构造函数。我所做的明确提到了 TextView 的 id。您可以在此处看到差异:link。如果它不起作用,请告诉我。