#android #kotlin
#Android #kotlin
Вопрос:
Итак, у меня есть список в одном классе, и я хочу добавить элементы в этот список из другого действия
Это код, который у меня есть до сих пор…
DashboardActivity.kt
class DashboardActivity : AppCompatActivity() {
private lateinit var buttonAddSession: Button
internal lateinit var listViewSessions: ListView
internal lateinit var sessions: ArrayList<Session>
private lateinit var databaseSession: DatabaseReference
private lateinit var uid: String
override fun onCreate(savedInstanceState: Bundle?) {
Log.i("in onCreate", "in on create method ")
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_dashboard)
listViewSessions = findViewById<View>(R.id.listViewSessions) as ListView
buttonAddSession = findViewById<View>(R.id.buttonAddSession) as Button
databaseSession = FirebaseDatabase.getInstance().getReference()
sessions = ArrayList()
buttonAddSession.setOnClickListener {
val intent = Intent(applicationContext, SessionActivity::class.java)
intent.putParcelableArrayListExtra("Sessions", sessions)
startActivity(intent)
Log.i("onCreate Listener", "sessions count : " sessions.count())
}
val username = intent.getStringExtra("com.example.tesla.myhomelibrary.useremail")
//val username = savedInstanceState!!.getString("com.example.tesla.myhomelibrary.userid")
Toast.makeText(
applicationContext,
"welcome user " username.toString(),
Toast.LENGTH_LONG
).show()
}
SessionActivity.kt
class SessionActivity : AppCompatActivity() {
private lateinit var buttonSubmitSession: Button
private lateinit var sessionDate: DatePicker
private lateinit var sessionLocation: EditText
private lateinit var sessionRadioGroup: RadioGroup
private lateinit var sessionRadioButtonTexasHoldem: RadioButton
private lateinit var sessionRadioButtonPotLimitOmaha: RadioButton
private lateinit var smallBlindEntry: EditText
private lateinit var bigBlindEntry: EditText
private lateinit var buyInAmount: EditText
private lateinit var cashOutAmount: EditText
private lateinit var hoursPlayed: EditText
@SuppressLint("WrongViewCast")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_add_session)
buttonSubmitSession = findViewById<View>(R.id.buttonSubmitSession) as Button
sessionDate = findViewById<DatePicker>(R.id.datePicker) as DatePicker
sessionLocation = findViewById<EditText>(R.id.locationEntry) as EditText
sessionRadioGroup = findViewById<RadioGroup>(R.id.radioGroup) as RadioGroup
sessionRadioButtonTexasHoldem = findViewById<RadioButton>(R.id.texasHoldemSelection) as RadioButton
sessionRadioButtonPotLimitOmaha = findViewById<RadioButton>(R.id.PLOSelection) as RadioButton
smallBlindEntry = findViewById<EditText>(R.id.smallBlindEntry) as EditText
bigBlindEntry = findViewById<EditText>(R.id.bigBlindEntry) as EditText
buyInAmount = findViewById<EditText>(R.id.buyInEntry) as EditText
cashOutAmount = findViewById<EditText>(R.id.cashOutEntry) as EditText
hoursPlayed = findViewById<EditText>(R.id.hoursPlayedEntry)
val bundle = intent.extras
var sessions = bundle?.getParcelableArrayList<Session>("Sessions")!!
buttonSubmitSession.setOnClickListener {
var date = sessionDate.dayOfMonth.toString() "/" sessionDate.month.toString() "/" sessionDate.year.toString()
var sessionType = ""
if (sessionRadioButtonTexasHoldem.isChecked()) {
sessionType = "Texas Hold'Em"
} else if (sessionRadioButtonTexasHoldem.isChecked()) {
sessionType = "Pot Limit Omaha"
}
var location = sessionLocation.text.toString()
var smallBlind = smallBlindEntry.text.toString().toInt()
var bigBlind = bigBlindEntry.text.toString().toInt()
var buyIn = buyInAmount.text.toString().toInt()
var cashOut = cashOutAmount.text.toString().toInt()
var hours = hoursPlayed.text.toString().toInt()
var addThis = Session("sessionId", date, sessionType, location, smallBlind, bigBlind, buyIn, cashOut, hours)
sessions.add(addThis)
Log.i("SessionActivity method", "sessions count = " sessions.count().toString())
finish()
}
}
}
Я пытаюсь добавить элементы в массив сеансов с помощью действия SessionActivity… проблема в том, что после возврата SessionActivity добавленные данные не отображаются в массиве сеансов в первом действии.
Ответ №1:
Из вашего FirstActivity вызовите SecondActivity, используя метод startActivityForResult()
Например:
int ACTIVITY_CODE= 1
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, ACTIVITY_CODE);
В вашем SecondActivity задайте данные, которые вы хотите вернуть обратно в FirstActivity.
Например: в SecondActivity, если вы хотите отправить обратно данные:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
Теперь в вашем классе FirstActivity напишите следующий код для метода onActivityResult().
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTIVITY_CODE) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
Комментарии:
1. На самом деле это устаревший способ. Взгляните на новый API результатов действия developer.android.com/training/basics/intents/result
2. Он еще не стабилен на стадии альфа-версии, поэтому я не рекомендовал API результатов активности.