繁体   English   中英

Android - 片段中的列表视图

[英]Android - Listview in Fragment

我想在 Fragment 中创建一个 ListView 但出了点问题。 在布局 listmygroups.xml 中有三个 TextViews(trainermygroupslistwhen、trainermygroupslistwhere、trainermygroupslistname)。 我尝试通过以下方式从另一个片段打开带有 listview(TrainerMyGroups) 的片段:

getFragmentManager().beginTransaction().replace(R.id.MainContainer,new TrainerMyGroups()).addToBackStack(null).commit();

TrainerMyGroups.java:

package com.hgyghyfghyu.apkana40;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;


/**
 * A simple {@link Fragment} subclass.
 */
public class TrainerMyGroups extends Fragment {


    ListView listView;
    TrainerGroupsAdapter adapter;
    String when[]={"tak","ret","sd"};
    String where[]={"dsf","sdf","sdfsdf"};
    String name[]={"sdfsdf","xcvxcv","xcvxcv"};

    public TrainerMyGroups() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_trainer_my_groups, container, false);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listView = (ListView) getActivity().findViewById(R.id.trainermygroupslistview);
        adapter = new TrainerGroupsAdapter(getContext(),R.layout.list_mygroups);

        for(int i=0;i<3;i++){
            TrainerGroupsDataProvider dataprovider = new TrainerGroupsDataProvider(when[i],name[i],where[i]);
            adapter.add(dataprovider);

        }
        listView.setAdapter(adapter);
    }
}

TrainerGroupsAdapter.java:

package com.hgyghyfghyu.apkana40;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.List;
import java.util.ArrayList;

/**
 * Created by dd on 2016-04-04.
 */
public class TrainerGroupsAdapter extends ArrayAdapter {

    List list = new ArrayList();

    public TrainerGroupsAdapter(Context context, int resource) {
        super(context, resource);
    }

    static class Datahandler{
        TextView name;
        TextView when;
        TextView where;
    }

    @Override
    public void add(Object object) {
        super.add(object);
        list.add(object);
    }

    @Override
    public int getCount() {
        return this.list.size();
    }

    @Override
    public Object getItem(int position) {
        return this.list.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row;
        row=convertView;
        Datahandler handler;
        if(convertView==null){
            LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row= inflater.inflate(R.layout.list_mygroups,parent,false);
            handler = new Datahandler();
            handler.name =  (TextView) row.findViewById(R.id.trainermygroupslistname);
            handler.where =  (TextView) row.findViewById(R.id.trainermygroupslistwhere);
            handler.when =  (TextView) row.findViewById(R.id.trainermygroupslistwhen);
            row.setTag(handler);
        }
        else {
            handler = (Datahandler)row.getTag();
        }

        TrainerGroupsDataProvider dataProvider;
        dataProvider = (TrainerGroupsDataProvider)this.getItem(position);
        handler.name.setText(dataProvider.getName());
        handler.when.setText(dataProvider.getWhen());
        handler.where.setText(dataProvider.getWhere());
        return row;
    }


}

并且有来自 AndroidMonitor 的错误

FATAL EXCEPTION: main
                                                                          Process: com.hgyghyfghyu.apkana40, PID: 27778
                                                                          java.lang.NullPointerException
                                                                              at com.hgyghyfghyu.apkana40.TrainerMyGroups.onCreate(TrainerMyGroups.java:41)
                                                                              at android.support.v4.app.Fragment.performCreate(Fragment.java:1951)
                                                                              at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1029)
                                                                              at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
                                                                              at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
                                                                              at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
                                                                              at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
                                                                              at android.os.Handler.handleCallback(Handler.java:733)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:136)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5045)
                                                                              at java.lang.reflect.Method.invokeNative(Native Method)
                                                                              at java.lang.reflect.Method.invoke(Method.java:515)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                                              at dalvik.system.NativeStart.main(Native Method)

TrainerMyGroups 的第 41 行是

listView.setAdapter(adapter);

我不确定,但可能此解决方案仅适用于 Activity,而不适用于 Fragment,如何更改我的代码以使其可用?

元素列表xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/trainermygroupslistwhen"
                android:textStyle="bold"
                android:textSize="20sp"
                android:textColor="#FFFFFF"
                android:layout_centerInParent="true"/>
        </RelativeLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/trainermygroupslistname"
                android:textStyle="bold"
                android:textSize="10sp"
                android:textColor="#FFFFFF"
                android:layout_centerInParent="true"/>
        </RelativeLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/trainermygroupslistwhere"
                android:textStyle="bold"
                android:textSize="10sp"
                android:textColor="#FFFFFF"
                android:layout_centerInParent="true"/>
        </RelativeLayout>
    </LinearLayout>
</LinearLayout>

您应该在设置适配器之前添加一些数据:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    listView = (ListView) getActivity().findViewById(R.id.trainermygroupslistview);
    adapter = new TrainerGroupsAdapter(getContext(),R.layout.list_mygroups);
    for(int i=0;i<3;i++){
        TrainerGroupsDataProvider dataprovider = new TrainerGroupsDataProvider(when[i],name[i],where[i]);
        adapter.add(dataprovider);

    }
    listView.setAdapter(adapter);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM