У меня сложная проблема, и мой Engli sh недостаточно хорош для объяснения, но я собираюсь попробовать.
У меня есть 3 действия: MainActivity, SecondActivity и ThirdActivity. В SecondActivity у меня есть интерактивный ListView. В ThirdActivity у меня есть TextView, и я вставляю результаты с этим кодом mantraEditText.setText(name);
. Сначала я должен получить результаты по нажатому элементу в MainActivity, а затем отправить в ThirdActivity из MainActivity. (Я не знаю почему, но только если я отправляю из MainActivity в ThirdActivity, приложение работает хорошо, если я отправляю напрямую из SecondActivity в ThirdActivity, я не могу сохранить результаты.)
Я получаю результаты от SecondActivity к MainActivity и отправьте его из MainActivity в ThirdActivity с этим кодом
if (KEY_NAME != null){
final Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
}else {
final Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
runOnUiThread(new Runnable() {
@Override
public void run() {
intent.putExtra(KEY_NAME, name);
startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
}
});
}
С этим кодом при запуске приложения оно переходит непосредственно в ThirdActivity с пустыми результатами. Но это то, что я хочу. Я должен запустить приложение, и я должен увидеть MainActivity. Если я нажму SecondActivity, я должен увидеть ListView. Если я щелкнул по элементу ListView, мне нужно было бы go перейти к ThirdActivity с результатами, по которым я щелкнул.
Я знаю, что пустой не означает ноль, и это нормально, что приложение думает, даже если оно пустое, у меня есть результаты. Я искал много тем об условиях if / else в StackOverflow и пробовал множество решений.
Если мое состояние true
, мое приложение запускает ThirdActivity напрямую с пустыми результатами. Когда я go вернусь в MainActivity, щелкните SecondActivity и выберите какой-то элемент, я смогу go в ThirdActivity с правильными результатами. Если мое состояние false
, мое приложение запускает MainActivity, но даже если я щелкаю элемент ListView, я не могу получить результаты.
Вот то, что я пробовал до сих пор
KEY_NAME != null
KEY_NAME == null
KEY_NAME.isEmpty()
!KEY_NAME.isEmpty()
KEY_NAME.equals("")
в SecondActivity или MainActivity
final String KEY_NAME = null;
final String KEY_NAME = "";
и многие другие.
Все, что я пытался, я пытался снова только с таким условием if
, как это
if (KEY_NAME.equals("")){
final Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
runOnUiThread(new Runnable() {
@Override
public void run() {
intent.putExtra(KEY_NAME, name);
startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
}
});
}
Я надеюсь, что смогу объяснить себя по-настоящему. Можете ли вы помочь мне, пожалуйста?
EDITED
Я получаю KEY_NAME отсюда (SecondActivity)
try{
ArrayList<HashMap<String, String>> userList = new ArrayList<>();
HashMap<String,String> user = new HashMap<>();
ListView lv = getListView();
InputStream istream = getAssets().open("userdetails.xml");
XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = parserFactory.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,false);
parser.setInput(istream,null);
String tag = "" , text = "";
int event = parser.getEventType();
while (event!= XmlPullParser.END_DOCUMENT){
tag = parser.getName();
switch (event){
case XmlPullParser.START_TAG:
if(tag.equals("user"))
user = new HashMap<>();
break;
case XmlPullParser.TEXT:
text=parser.getText();
break;
case XmlPullParser.END_TAG:
switch (tag){
case "name": user.put("name",text);
break;
case "designation": user.put("designation",text);
break;
case "location": user.put("location",text);
break;
case "user":
if(user!=null)
userList.add(user);
break;
}
break;
}
event = parser.next();
}
ListAdapter adapter = new SimpleAdapter(SecondActivity.this, userList, R.layout.list_row,new String[]{KEY_NAME, KEY_DESC, KEY_COST}, new int[]{R.id.name, R.id.designation, R.id.location});
lv.setAdapter(adapter);
// listening to single listitem click
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
String designation = ((TextView) view.findViewById(R.id.designation)).getText().toString();
String location = ((TextView) view.findViewById(R.id.location)).getText().toString();
// Starting new intent
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra(KEY_NAME, name);
intent.putExtra(KEY_COST, designation);
intent.putExtra(KEY_DESC, location);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
}
}
});
}
И после KEY_NAME здесь (ThirdActivity)
public class ThirdActivity extends AppCompatActivity {
static final String KEY_NAME = "name";
private EditText mantraEditText;
private TextInputEditText malasEditText;
private Button saveButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_mantra);
Intent in = getIntent();
// Get XML values from previous intent
String name = in.getStringExtra(KEY_NAME);
overridePendingTransition(R.anim.fade_in_layout,R.anim.fade_out_layout);
CardView mantraNote = findViewById(R.id.cv_mantra_note);
Animation mantraNoteAnim = AnimationUtils
.loadAnimation(NewMantraActivity.this,R.anim.mantra_note_anim);
mantraNote.startAnimation(mantraNoteAnim);
mantraEditText = findViewById(R.id.et_new_mantra);
mantraEditText.setText(name);
malasEditText = findViewById(R.id.et_total_malas);
saveButton = findViewById(R.id.done_chanting_button);
PushDownAnim.setPushDownAnimTo(saveButton);
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addMantra();
}
});
}
private void addMantra() {
final String mantra = mantraEditText.getText().toString();
final String malas = malasEditText.getEditableText().toString();
Animation shake = AnimationUtils.loadAnimation(NewMantraActivity.this, R.anim.shake);
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Mantra is empty
if (TextUtils.isEmpty(mantra)) {
mantraEditText.startAnimation(shake);
mantraEditText.setError("Required");
if (vibrator != null)
vibrator.vibrate(30);
return;
}
// Malas is empty
if (TextUtils.isEmpty(malas)) {
malasEditText.startAnimation(shake);
malasEditText.setError("Required");
if (vibrator != null)
vibrator.vibrate(30);
return;
}
// Save the mantra
Intent intent = new Intent(ThirdActivity.this, MainActivity.class);
intent.putExtra("mantra_name", mantraEditText.getText().toString().trim());
intent.putExtra("total_malas",Integer.parseInt(malasEditText.getEditableText().toString().trim()));
setResult(RESULT_OK, intent);
finish();
}
А это MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get XML values from previous intent
final String name = getIntent().getStringExtra(KEY_NAME);
final Button addMantraButton = findViewById(R.id.add_mantra_button);
PushDownAnim.setPushDownAnimTo(addMantraButton, settingsButton, helpButton);
addMantraButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
}
}
});
if (!KEY_NAME.equals("")){
final Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
runOnUiThread(new Runnable() {
@Override
public void run() {
intent.putExtra(KEY_NAME, name);
startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case (MANTRA_DETAILS_ACTIVITY_REQUEST_CODE): {
if (resultCode == RESULT_OK) {
String mantraName = data.getStringExtra("mantra_name");
int totalMalas = data.getIntExtra("total_malas", 0);
Mantra mantra = new Mantra(mantraName, totalMalas);
mMantraViewModel.insert(mantra);
}
}
}
}
}