ListView
各行にを含む がありTextView
ます。ユーザーがクリックすると、の値を取得TextView
して文字列変数に保存します。ユーザーは別のアクティビティに移動し、そこでデータを入力する必要がありますTextView
。最初のアクティビティの情報状態を失わないようにするために、 を使用startActivityForResult()
して、後でメソッドを使用して 2 番目のアクティビティから情報を取得する必要がありましたonActivityResult()
。
問題はこれです: 問題の TextView の値と値を比較する必要がありますが、TextView の値を含むと思われる String 変数が null です。
2 番目のアクティビティを開始する前に、文字列値をトーストしたところ、正しい文字列が返されましたがonActivityResult()
、null を返す ではありませんでした。
なぜこうなった?開いたアクティビティのすべての情報を保持するために使用したインテントではありませんか?
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;
}
}