0

我有一个ListView,每一行都包含一个TextView. 在用户单击时,我获取 的值TextView并将其存储在 String 变量中,并且用户被导航到另一个活动,他/她需要在上面输入一些数据TextView。为了不丢失第一个活动的信息状态,我不得不使用startActivityForResult()并稍后使用该方法从第二个活动中获取信息onActivityResult()

问题是这样的:我需要将一个值与相关 TextView 的值进行比较,但是应该包含 TextView 值的 String 变量为空。

在开始第二个活动之前,我烤了 String 值,它返回了正确的字符串,但不是在onActivityResult()返回 null 的地方。

为什么会这样?我使用的 Intent 不是假设保留已打开活动的所有信息吗?

ListView 的 onItemClick

@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();
        }

onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    if(resultCode == RESULT_OK)
    {
        @SuppressWarnings("unchecked")
        HashMap <String, String> materialDetails = (HashMap <String, String>)data.getSerializableExtra("map");
        Set<?> set = materialDetails.entrySet();
        Iterator<?> i = set.iterator();

        ArrayList<String> materialNames = new ArrayList<String>();
        ArrayList<String> materialAmounts = new ArrayList<String>();

        do
        {
            @SuppressWarnings("rawtypes")
            Map.Entry me = (Map.Entry)i.next();

            materialNames.add(me.getKey().toString());
            materialAmounts.add(me.getValue().toString());
        }
        while (i.hasNext());

        for(Error e : errorList)
        {
            // ----- COMPARING THE VALUES -----
            // here clickedError is null
            if(e.description.equals(clickedError)) 
            {
                for(int j = 0; j < materialNames.size(); j++)
                {
                    MaterialClass mc = new MaterialClass();
                    mc.setName(materialNames.get(j));
                    mc.setAmount(Integer.parseInt(materialAmounts.get(j)));
                    e.materialList.add(mc);
                }
                if (e.materialList.size() != 0)
                    e.checked = true;
                else
                    e.checked = false;
            }
}
4

3 回答 3

2

我的猜测:在移动到第二个活动时,活动被破坏并重新启动。这很容易通过活动生命周期方法(onCreate/onRestart/etc)中的日志消息来确认。

以下链接可能用于在活动切换期间保留数据:http: //developer.android.com/training/basics/activity-lifecycle/recreating.html

于 2013-08-14T09:13:27.063 回答
0

将您的 String 值设为静态,以便保留其值。或者您可以使用共享偏好来保存价值并在以后使用它。

于 2013-08-14T09:09:55.973 回答
0

如果它不问我,这是有效的

TextView textviewDate=(TextView)findViewById(R.id.yourtextviewid);
clickedError=textviewDate.getText().toString();
于 2013-08-14T09:12:38.000 回答