我有ListView
,每行包含TextView
。在用户点击时,我获取TextView
的值并将其存储在String变量中,并且用户被导航到另一个他/她需要在所述{{1}上输入一些数据的活动}。为了不丢失第一个活动的信息状态,我必须使用TextView
,然后使用方法startActivityForResult()
从第二个活动中获取信息。
问题是:我需要将值与有问题的TextView的值进行比较,但是应该包含TextView值的String变量为null。
在启动第二个活动之前,我对String值进行了烘烤,并返回了正确的字符串,但不在onActivityResult()
中,返回null。
为什么会这样?我使用过的Intent是否保留了已打开活动的所有信息?
ListView的onItemClick
onActivityResult()
onActivityResult
@Override
public void onItemClick(AdapterView<?> listView, View itemView, int itemPosition, long itemID)
{
clickedError = ((TextView)itemView).getText().toString();
String errorIDQuery = "SELECT _id FROM " + TABLE_ERROR + " WHERE error_description LIKE '" + clickedError + "';";
Cursor getErrorID = db.rawQuery(errorIDQuery, null);
getErrorID.moveToFirst();
errorID = getErrorID.getInt(0);
Intent intent = new Intent(Repair.this, Material.class);
intent.putStringArrayListExtra("materialList", materialList);
startActivityForResult(intent, 1);
Toast.makeText(getApplicationContext(), clickedError, Toast.LENGTH_LONG).show();
}
答案 0 :(得分:2)
我的猜测:在移动到第二个活动时,活动被销毁并重新启动。这很容易通过活动生命周期方法(onCreate / onRestart / etc)中的日志消息进行确认。
以下链接可能有助于在活动切换期间保留数据:http://developer.android.com/training/basics/activity-lifecycle/recreating.html
答案 1 :(得分:0)
将String值设为静态,以便保留其值。或者你可以使用共享偏好来节省价值并在以后使用它。
答案 2 :(得分:0)
如果它不问我那就行了
TextView textviewDate=(TextView)findViewById(R.id.yourtextviewid);
clickedError=textviewDate.getText().toString();