【问题标题】:Listview do not show up in FragmentListview 不显示在 Fragment 中
【发布时间】:2014-12-18 16:18:56
【问题描述】:

我在 Fragment 中创建了一个 Listview,但是当我执行应用程序时,ListView 没有出现在屏幕上。没有崩溃。我有一个文本视图和一个列表视图。 Textview 显示,但 listview 不显示。

片段代码:

public class PlayerFragment extends Fragment {
private List<Station> myStation = new ArrayList<Station>();
private LayoutInflater mInflater;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout.fragment_player,
             null);

    populateStationList();
    myStation.add(new Station("station1", "url1", R.drawable.station1, "station1 description"));
    myStation.add(new Station("station2", "url2", R.drawable.station2, "station2 description"));
    myStation.add(new Station("station3", "url3", R.drawable.station3, "station3 description"));

    populateListView();
    ArrayAdapter<Station> adapter = new MyListAdapter();
    ListView list = (ListView) view.findViewById(R.id.stationListView);
    list.setAdapter(adapter);

    registerClickCallback();
    list = (ListView) view.findViewById(R.id.stationListView);
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View viewClicked,
                                int position, long id) {
            Station clickedStation = myStation.get(position);
            String message = "You clicked position " + position
                    + "\n" + "Station: " + clickedStation.getStationName();
            Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show();
        }
    });

    return inflater.inflate(R.layout.fragment_player, container, false);
}

private class MyListAdapter extends ArrayAdapter<Station> {
    public MyListAdapter() {
        super(getActivity(), R.layout.station_list_view, myStation);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Make sure we have a view to work with (may have been given null)
        View itemView = convertView;
        if (itemView == null) {
            itemView = mInflater.inflate(R.layout.station_list_view, parent, false);
        }

        // Find the car to work with.
        Station currentStation = myStation.get(position);

        // Fill the view
        ImageView imageView = (ImageView) itemView.findViewById(R.id.item_icon);
        imageView.setImageResource(currentStation.getStationAlbum());

        TextView stationName = (TextView) itemView.findViewById(R.id.item_station_name_text_view);
        stationName.setText(currentStation.getStationName());

        TextView stationURL = (TextView) itemView.findViewById(R.id.item_url_text_view);
        stationURL.setText("" + currentStation.getStationURL());

        TextView stationDescription = (TextView) itemView.findViewById(R.id.item_description_text_view);
        stationDescription.setText(currentStation.getStationDescription());

        return itemView;
        }
    }
}

片段的 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/playerFragment"
    tools:context="com.brandonong.sgpradio.PlayerFragment">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="heysdadasdasdadasdasd"
        android:id="@+id/textview1"/>
    <ListView
        android:id="@+id/stationListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textview1" >
    </ListView>
</RelativeLayout>

【问题讨论】:

    标签: android listview fragment android-listfragment


    【解决方案1】:

    问题是,除了布局膨胀inflater.inflate(R.layout.fragment_player, container, false); 之外,所有其他代码都应该放在onViewCreated 中。 试试这个,看看它是否有效!

    编辑:

    您的 onCreateView:

    return inflater.inflate(R.layout.fragment_player, container, false);

    OnViewCreated:

     populateStationList();
        myStation.add(new Station("station1", "url1", R.drawable.station1, "station1 description"));
        myStation.add(new Station("station2", "url2", R.drawable.station2, "station2 description"));
        myStation.add(new Station("station3", "url3", R.drawable.station3, "station3 description"));
    
        populateListView();
        ArrayAdapter<Station> adapter = new MyListAdapter();
        ListView list = (ListView) view.findViewById(R.id.stationListView);
        list.setAdapter(adapter);
    
        registerClickCallback();
        list = (ListView) view.findViewById(R.id.stationListView);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View viewClicked,
                                    int position, long id) {
                Station clickedStation = myStation.get(position);
                String message = "You clicked position " + position
                        + "\n" + "Station: " + clickedStation.getStationName();
                Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show();
            }
        });
    

    顺便说一句,我真的建议您查看此post 以查看 ViewHolder 模式,这大大提高了您的 ListView 性能!

    【讨论】:

    • 你能帮我解决这个问题吗?喜欢给我看它的代码吗?如果我把它移到onViewCreated,'ListView list = (ListView) view.findViewById(R.id.stationListView);'中的'view'怎么样
    • 看看有没有帮助!我没有测试它,所以你可能需要修复一些小问题!
    • 应用程序崩溃,出现以下错误:java.lang.NullPointerException at (package name).PlayerFragment$MyListAdapter.getView(PlayerFragment.java:92)。第 92 行是 itemView = mInflater.inflate(R.layout.station_list_view, parent, false); @leonardo
    • 顺便说一句,我将代码(关于列表视图的构建和显示的所有内容)从活动转移到了这个片段。它在活动中工作。
    • 你的 mInflater 是空的,你应该在第 92 行做这样的事情:LayoutInflater.from(getActivity()).inflate(R.layout.station_list_view, parent, false)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多