Контекст ListViewAdapter при ошибке активности фрагмента, что мне делать?

#java #android #listview #android-fragments

#java #Android #listview #android-фрагменты

Вопрос:

Спокойной ночи, мастера 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;
    }
}
  

and this is the xml file. 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 который я разработал как listview в frag_tour.xml

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

Комментарии:

1. Вместо нескольких массивов строк вам следует создать класс, а затем создать список этого класса.

2. ListView.setAdapter((ListAdapter) ArrayList); хорошее исключение приведения класса.. ListViewAdapterTour(this, ArrayList).. это фрагмент, и конструктор, вероятно, ожидает контекст

3. Попробуйте использовать getActivity() вместо this в строке, где у вас ошибка.

Ответ №1:

Контекстом должно быть действие, содержащее фрагмент. Итак, вместо this в вашем конструкторе адаптера используйте getActivity()

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

Комментарии:

1. большое вам спасибо, это очень полезно. в моем коде больше нет ошибок. но не удается запустить. Я не знаю, какая часть является ошибкой. Я только хочу добавить listview к фрагменту activity. после того, как я искал в Интернете, но никто не смог.