У меня есть объект базы данных области каждый с 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();
}
}
Ваш ответ очень ценится. Большое спасибо.
Пожалуйста, используйте следующий код: Я передаю Событие с 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())
Надеюсь, поможет.
Вы можете использовать библиотеку 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);
Используйте комплект,
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();
}
}
}
}