Как передать и получить результат области из ListView в другом действии?

1

У меня есть объект базы данных области каждый с 4 свойствами. В первом упражнении я поставил Listview для отображения только одного свойства, т.е. Event. Нажав на любое из отображаемых событий, я хочу перейти к действию 2 (подробное представление), в котором будут отображены все остальные 3 свойства, связанные с выбранным событием. Как это сделать с намерением и как получить все свойства, которые должны отображаться индивидуально в упражнении 2?

public class Events extends RealmObject {

    public String fileRef;
    public String event;
    public String venue;
    public String date;


    @Override
    public String toString() {
        return " \n Events{" +
                "fileRef='" + fileRef + '\'' +
                ", parties='" + event + '\'' +
                ", \n court='" + venue + '\'' +
                ", courtAt='" + date + '\'' +
                '}';
    }

    public String getFileRef() {
        return fileRef;
    }

    public void setFileRef(String fileRef) {
        this.fileRef = fileRef;
    }

    public String getEvent() {
        return event;
    }

    public void setEvent(String event) {
        this.event = event;
    }

    public String getVenue() {
        return venue;
    }

    public void setVenue(String venue) {
        this.venue = venue;
    }

    public String getDate() {
        return date;
    }

    public void setCourtAt(String date) {
        this.date = date;
    }


}

Код ниже находится в 1-ом действии. Все, что я получил, это передать только одно свойство, то есть событие. Как мне пройти и получить все свойства в Activity2?

public class AllEventActivity extends AppCompatActivity {
    private ArrayAdapter adapter;


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


        ListView list = (ListView) findViewById(R.id.listView);




        Realm realm;
        realm = Realm.getDefaultInstance();

        RealmResults<Events> results = realm.where(Events.class).findAll();

        ArrayList<String> rows = new ArrayList<>();
        for (Events events : results)

        {
            rows.add(Events.event);


        }

        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, rows);
        list.setAdapter(adapter);


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

                String selectedEvent = parent.getItemAtPosition(position).toString();

                Intent eventDetailIntent = new Intent(AllEventActivity.this, Activity2.class);
                eventDetailIntent.putExtra("event", selectedEvent);
                startActivity(eventDetailIntent);
            }
        });

    }

Ниже приведен код в Activity2. Мне только удалось заставить тост отобразить событие.

public class Activity2 extends AppCompatActivity {


    private String selectedEvent;

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

        selectedEvent = getIntent().getExtras().get("event").toString();
        Toast.makeText(Activity2.this, selectedCase, Toast.LENGTH_LONG).show();

    }
}

Ваш ответ очень ценится. Большое спасибо.

Теги:
realm

3 ответа

0

Пожалуйста, используйте следующий код: Я передаю Событие с 1 по 2 активность

Модельный класс

public class Events extends RealmObject implements Serializable {

    public String fileRef;
    public String event;
    public String venue;
    public String date;


    @Override
    public String toString() {
        return " \n Events{" +
                "fileRef='" + fileRef + '\'' +
                ", parties='" + event + '\'' +
                ", \n court='" + venue + '\'' +
                ", courtAt='" + date + '\'' +
                '}';
    }

    public String getFileRef() {
        return fileRef;
    }

    public void setFileRef(String fileRef) {
        this.fileRef = fileRef;
    }

    public String getEvent() {
        return event;
    }

    public void setEvent(String event) {
        this.event = event;
    }

    public String getVenue() {
        return venue;
    }

    public void setVenue(String venue) {
        this.venue = venue;
    }

    public String getDate() {
        return date;
    }

    public void setCourtAt(String date) {
        this.date = date;
    }


}

Liveview Click Event:

Intent eventDetailIntent = new Intent(AllEventActivity.this, Activity2.class);
        eventDetailIntent.putExtra("event", results.get(position)); // Selected postion item
        startActivity(eventDetailIntent);

Во втором упражнении вы можете получить переданные данные модели.

 Events eventModel = ( Events) getIntent().getSerializableExtra("event");

Таким образом, вы будете иметь свои данные в EventModel Object. Теперь вы можете получить данные из этой модели и установить их в TextViews.

подобно

textview1.setText(eventModel.getEvent())
textview2.setText(eventModel.getVenue())
textview3.setText(eventModel.getDate())

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

  • 0
    Я прошу прощения за поздний ответ, так как я был вдали от моего ноутбука в течение нескольких дней. Является ли модель, которую вы передаете в Activity2, полностью или только моделью, выбранной в Деятельности 1?
  • 0
    Я думаю, что у кода для намерения есть проблемы. Всякий раз, когда я щелкал элемент в listView, чтобы перейти ко 2-му действию, приложение падало.
Показать ещё 5 комментариев
0

Вы можете использовать библиотеку Gson, вам нужно добавить импорт внутри вашего файла Gradle, чтобы использовать его

С Gson вы можете разыграть ваши события в строку

Gson gson = new Gson();
intent.putExtra("event", gson.toJson(selectedEvent));

И вы можете получить свой объект в следующем упражнении с Gson

Gson gson = new Gson();
Events yourEvent = gson.fromJson(getIntent().getStringExtra("event"), Events.class);
  • 0
    Спасибо за ответ. Мое приложение зависло, когда я щелкнул по выбранному элементу, чтобы перейти ко 2-му действию.
  • 0
    Я думаю, что ваш код сбой здесь getIntent (). GetExtras (). Get ("событие"). ToString (); метод get может вернуть null, и вы пытаетесь вызвать toString для нулевого объекта
Показать ещё 1 комментарий
0

Используйте комплект,

public class Activity2 extends AppCompatActivity {


private String selectedEvent;

Bundle bundle;

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


    bundle = getIntent().getExtras();

    if (bundle != null){

        try {
            String selectedEvent = bundle.getString("event");
        }catch (Exception e){
            e.printStackTrace();
        }

    }

}
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню