片段活动错误中的ListView Adapter上下文,我该怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了片段活动错误中的ListView Adapter上下文,我该怎么办?相关的知识,希望对你有一定的参考价值。

晚安android大师。请帮我。也许那些比我更了解的人可以帮助我解决我现在面临的问题。

1 https://imgur.com/S2TU08q

我在片段上做了一个listview。我停下来是因为我很困惑我是如何继续前进的。也许下面的代码可以帮助您解决我的问题!

这是我制作的片段。我把它命名为Frag_Tour.java

public class Frag_Tour extends Fragment {

    ListView listView;
    ListViewAdapterTour adapter;
    String[] judul1;
    String[] judul2;
    String[] durasi;
    String[] harga;
    int[] gambarTour;
    ArrayList<Model> arrayList = new ArrayList<Model>();

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

        View rootView = inflater.inflate(R.layout.frag_tour, container, false);

        judul1 = new String[]{"Paket Hemat", "Paket Reguler", "Paket Honeymoon"};
        judul2 = new String[]{"Wisata Belitung", "Wisata Belitung", "Wisata Belitung"};
        durasi = new String[]{"3 Hari 2 Malam", "4 Hari 3 Malam", "3 Hari 1 Malam"};
        harga = new String[]{"Rp 750.000/pax", "Rp 750.000/pax", "Rp 750.000/pax"};
        gambarTour = new int[]{
                R.drawable.mercusuar_1, R.drawable.mercusuar_2, R.drawable.mercusuar_3
        };

        listView = rootView.findViewById(R.id.listView);

        for (int i = 0; i < judul1.length; i++) {
            Model model = new Model(judul1[i], judul2[i], durasi[i], harga[i], gambarTour[i]);
            arrayList.add(model);
        }

        adapter = new ListViewAdapterTour(this, arrayList);

        listView.setAdapter((ListAdapter) arrayList);

        return rootView;
    }

}

这是xml文件。 frag_tour.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/parent_view"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

</LinearLayout>

[2] https://imgur.com/ehPanZM

这是我创建的ListViewAdapter。我把它命名为ListViewAdapterTour.java

public class ListViewAdapterTour extends BaseAdapter {


    Context mContext;
    LayoutInflater inflater;
    List<Model> modellist;
    ArrayList<Model> arrayList;

    public ListViewAdapterTour (Context context, List<Model> modellist) {

        mContext = context;
        this.modellist = modellist;
        inflater = LayoutInflater.from(mContext);
        this.arrayList = new ArrayList<Model>();
        this.arrayList.addAll(modellist);

    }

    public class ViewHolder {
        TextView Judul1, Judul2, Durasi, Harga;
        ImageView GambarTour;
    }
    @Override
    public int getCount() {
        return modellist.size();
    }

    @Override
    public Object getItem(int i) {
        return modellist.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int position, View view, ViewGroup parent) {
        ViewHolder holder;
        if (view==null){
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.row_tour, null);

            holder.Judul1 = view.findViewById(R.id.judul1);
            holder.Judul2 = view.findViewById(R.id.judul2);
            holder.Durasi = view.findViewById(R.id.durasi);
            holder.Harga = view.findViewById(R.id.harga);
            holder.GambarTour = view.findViewById(R.id.GambarTour);

            view.setTag(holder);
        }
        else {
            holder = (ViewHolder)view.getTag();
        }

        holder.Judul1.setText(modellist.get(position).getJudul1());
        holder.Judul2.setText(modellist.get(position).getJudul2());
        holder.Durasi.setText(modellist.get(position).getDurasi());
        holder.Harga.setText(modellist.get(position).getHarga());

        holder.GambarTour.setImageResource(modellist.get(position).getGambartour());

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (modellist.get(position).getJudul1().equals("Paket Hemat 3 Hari 2 Malam")){
                    Intent intent = new Intent(mContext, TourDetail.class);
                    intent.putExtra("contentTv","PAKET HEMAT");
                    mContext.startActivity(intent);
                }
            }
        });

        return view;
    }
}

这是xml文件。 row_tour.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:focusableInTouchMode="true"
    android:orientation="vertical">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_margin="@dimen/spacing_middle"
        android:layout_weight="1"
        app:cardCornerRadius="2dp"
        app:cardElevation="2dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="170dp"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/GambarTour"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="centerCrop"
                android:src="@drawable/mercusuar_1"
                tools:ignore="ContentDescription" />

            <View
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/overlay_dark_20" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignTop="@id/GambarTour"
                android:layout_margin="@dimen/spacing_medium"
                android:orientation="vertical"
                tools:ignore="UselessParent">

                <TextView
                    android:id="@+id/judul1"
                    style="@style/TextAppearance.AppCompat.Large"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Paket Hemat"
                    android:textColor="@color/White"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/judul2"
                    style="@style/TextAppearance.AppCompat.Large"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Wisata Belitung"
                    android:textColor="@color/White"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/durasi"
                    style="@style/TextAppearance.AppCompat.Caption"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:text="@string/_3_hari_2_malam"
                    android:textColor="@color/White" />

            </LinearLayout>

            <ImageView
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_alignEnd="@id/GambarTour"
                android:layout_alignRight="@id/GambarTour"
                android:layout_margin="@dimen/spacing_medium"
                android:src="@drawable/ic_favorite_border"
                android:tint="@color/White" />

            <TextView
                android:id="@+id/harga"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignEnd="@id/GambarTour"
                android:layout_alignRight="@id/GambarTour"
                android:layout_alignBottom="@id/GambarTour"
                android:layout_margin="@dimen/spacing_large"
                android:background="@drawable/gradient_green"
                android:padding="@dimen/spacing_xmedium"
                android:text="Rp 750.000/pax"
                android:textColor="@color/White" />

        </RelativeLayout>

    </android.support.v7.widget.CardView>

</LinearLayout>

[3] https://imgur.com/h7WiBgK

这是我使用的model.java的代码

package com.androidrion.sejengkalapp;

class Model {
    private String judul1;
    private String judul2;
    private String durasi;
    private String harga;
    private int gambartour;

    //constructor
    Model(String judul1, String judul2, String durasi, String harga, int gambartour) {
        this.judul1 = judul1;
        this.judul2 = judul2;
        this.durasi = durasi;
        this.harga = harga;
        this.gambartour = gambartour;
    }

    //getters


    String getJudul1() {
        return this.judul1;
    }

    String getJudul2() {
        return this.judul2;
    }

    String getDurasi() {
        return this.durasi;
    }

    String getHarga() {
        return this.harga;
    }

    int getGambartour() {
        return this.gambartour;
    }
}

我希望关于Android的老师和大师可以帮助我解决这个问题。我想要的是row_tour.xml,我将其设计为frag_tour.xml中的listview

[4] https://imgur.com/VLzOUiK

答案

上下文应该是保存片段的活动。因此,在适配器构造函数中使用this而不是getActivity()

adapter = new ListViewAdapterTour(getActivity(), arrayList);

以上是关于片段活动错误中的ListView Adapter上下文,我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

view、adapter、getActivity()、infragment 都是 null

片段中的 Listview 适配器给出空指针异常

如何访问活动内部/从活动中的片段视图组件

为啥 recyclerview$adapter 在片段中为空

未创建 Android listview 内容视图

刷新同一活动中剩余的当前片段(ListView 数据)