Пользовательский ListView с использованием CardView BaseAdapter OnItemClick - PullRequest
0 голосов
/ 09 сентября 2018

Мне действительно нужна помощь и какое-то решение

Я пытаюсь сделать пользовательский ListView, используя CardView с BaseAdapter, у меня есть 5 элементов списка. Каждый список содержит изображение, заголовок и описание. У меня возникла проблема, я не знал, как использовать Click каждые ListView в новой активности

Это базовый Java-код адаптера

package com.projectskripsi.wisatajogja.adapter;

import android.content.Context;
import android.media.Image;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.projectskripsi.wisatajogja.R;
import com.projectskripsi.wisatajogja.model.Model;

import java.util.ArrayList;



public class WisataAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<Model> models;

    public WisataAdapter(Context context, ArrayList<Model> models) {
        this.context = context;
        this.models = models;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null){

            convertView = View.inflate(context , R.layout.list_item1 ,null);
        }
        ImageView images = (ImageView) convertView.findViewById(R.id.wisataimage);
        TextView title = (TextView) convertView.findViewById(R.id.namawisataTV);
        TextView about = (TextView) convertView.findViewById(R.id.wisatadesTV);

        Model model = models.get(position);

        images.setImageResource(model.getWisataimage());
        title.setText(model.getWisataTitle());
        about.setText(model.getAboutTitle());

        return convertView;
    }
}

и эта модель Java

package com.projectskripsi.wisatajogja.model;




public class Model {

    private int wisataimage;
    private String wisataTitle;
    private String aboutTitle;

    public Model(int wisataimage, String wisataTitle, String aboutTitle) {
        this.wisataimage = wisataimage;
        this.wisataTitle = wisataTitle;
        this.aboutTitle = aboutTitle;
    }

    public int getWisataimage() {
        return wisataimage;
    }

    public void setWisataimage(int wisataimage) {
        this.wisataimage = wisataimage;
    }

    public String getWisataTitle() {
        return wisataTitle;
    }

    public void setWisataTitle(String wisataTitle) {
        this.wisataTitle = wisataTitle;
    }

    public String getAboutTitle() {
        return aboutTitle;
    }

    public void setAboutTitle(String aboutTitle) {
        this.aboutTitle = aboutTitle;
    }
}

И это MainActivity Java

package com.projectskripsi.wisatajogja;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.projectskripsi.wisatajogja.adapter.WisataAdapter;
import com.projectskripsi.wisatajogja.model.ListDetails1;
import com.projectskripsi.wisatajogja.model.Model;

import java.util.ArrayList;

public class GunungKidul extends AppCompatActivity {

    private ListView listView;
    private ArrayList<Model> models;
    private WisataAdapter wisataAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gunung_kidul);

        listView = (ListView) findViewById(R.id.listwisata1);
        models = ListDetails1.getList();

        wisataAdapter = new WisataAdapter(GunungKidul.this,models);
        listView.setAdapter(wisataAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Model model = models.get(position);

                Intent intent = new Intent(GunungKidul.this, Pantai_Kesirat.class);
                intent.putExtra("wisataTittle", listView.getItemAtPosition(position).toString());
                startActivity(intent);




            }
        });

    }
}

Спасибо за ваш ответ .. Мне действительно нужна помощь, ребята ..

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

Добро пожаловать в StackOverflow:)

Итак, у меня есть простое решение вашей определенной проблемы, проверьте, работает ли оно для вас.

  1. Вы реализуете прослушиватель кликов, скажем, «CardClickListener» в вашей основной деятельности (та, которая имеет список CardViews).
  2. Pass это при запуске адаптера для ListView.
  3. В вашем адаптере при каждом щелчке на CardItem вы вызываете этот clickListener и передаете объект данных, связанный с ним, в MainActivity.
  4. Разобрать объект данных в вашей MainActivity и на основе этого перейти к вашей соответствующей деятельности.

Хотя это решение будет работать наверняка, я не уверен, что это лучшее решение вашей проблемы. Когда у вас что-то получится, попробуйте улучшить это.

Надеюсь, это поможет!

0 голосов
/ 09 сентября 2018
  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               Model model= (Model) wisataAdapter.getItem(position);

                if(position==0){
                   Intent intent = new Intent(GunungKidul.this, Pantai_Kesirat.class);
                   //To pass whole model data with intent:
                   intent.putExtra("MyClassKey", model);
                   startActivity(intent);
                }
                else if{
                    Intent intent = new Intent(GunungKidul.this,  Goa_Pindul.class);
                    //To pass whole model data with intent:
                    intent.putExtra("MyClassKey", model);
                    startActivity(intent);
                }
        else if{
                    Intent intent = new Intent(GunungKidul.this, Pantai_Baron.class);
                    //To pass whole model data with intent:
                    intent.putExtra("MyClassKey", model);
                    startActivity(intent);
                }
        else if{
                    Intent intent = new Intent(GunungKidul.this, Goa_Jomblang.class);
                    //To pass whole model data with intent:
                    intent.putExtra("MyClassKey", model);
                    startActivity(intent);
                }
        else if{
                    Intent intent = new Intent(GunungKidul.this, AirTerjun.class);
                    //To pass whole model data with intent:
                    intent.putExtra("MyClassKey", model);
                    startActivity(intent);
                }



                            }
                        })

;

используйте этот код, но всегда помните положение вашей карты или значение индекса, и какое действие должно открываться при нажатии на карту. Похоже, если вы щелкнете по Первой карте, откройте операцию Pantai_Kesirat

0 голосов
/ 09 сентября 2018

Используйте Serializable в вашем классе модели следующим образом:

package com.projectskripsi.wisatajogja.model;

    public class Model implements Serializable {

        private int wisataimage;
        private String wisataTitle;
        private String aboutTitle;

        public Model(int wisataimage, String wisataTitle, String aboutTitle) {
            this.wisataimage = wisataimage;
            this.wisataTitle = wisataTitle;
            this.aboutTitle = aboutTitle;
        }

        public int getWisataimage() {
            return wisataimage;
        }

        public void setWisataimage(int wisataimage) {
            this.wisataimage = wisataimage;
        }

        public String getWisataTitle() {
            return wisataTitle;
        }

        public void setWisataTitle(String wisataTitle) {
            this.wisataTitle = wisataTitle;
        }

        public String getAboutTitle() {
            return aboutTitle;
        }

        public void setAboutTitle(String aboutTitle) {
            this.aboutTitle = aboutTitle;
        }
    }

тогда ваше первое действие от вас передает данные другому действию в элементе просмотра элемента списка, пишется как:

public class GunungKidul extends AppCompatActivity {

    private ListView listView;
    private ArrayList<Model> models;
    private WisataAdapter wisataAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gunung_kidul);

        listView = (ListView) findViewById(R.id.listwisata1);
        models = ListDetails1.getList();

        wisataAdapter = new WisataAdapter(GunungKidul.this,models);
        listView.setAdapter(wisataAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              Intent intent = new Intent(GunungKidul.this, Pantai_Kesirat.class);
              //To pass whole model data with intent:
             intent.putExtra("MyClassKey", models.get(position));
                startActivity(intent);




            }
        });

    }
}

Теперь в классе Pantai_Kesirat вы создали класс модели Object, такой как:

Model model;

затем в onCreate() методе вашего второго занятия, просто получите ваши данные из намерения, например:

    // To retrieve object in second Activity
   model =(Model) getIntent().getSerializableExtra("MyClassKey");

затем используйте данные вашего модельного класса, где вы хотите, с помощью метода получения и установки вашего модельного класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...