2017-08-29 14 views
0

私は、アイテムをリストビューに追加し、そのアイテムを長いクリックで削除して編集できるようにするためのアプリケーションを作成しました。ただし、1つ以上のアイテムは編集できません。私の最初の編集が動作し、そのアイテムは更新されますが、それ以降は編集しようとする他のアイテムは同じままです。ここでTo Doアプリケーションで複数のリストアイテムを編集できません

は編集の責任だ私のクラスである:

public class EditItemActivity extends AppCompatActivity { 
    EditText editToDo; 
    String itemPos; 
    Button saveChanges; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_edit_item); 

     editToDo = (EditText) findViewById(R.id.edit_todo_item); 
     saveChanges = (Button)findViewById(R.id.save_changes); 

     String item = getIntent().getStringExtra("item"); 
     editToDo.setText(item); 
     itemPos = getIntent().getStringExtra("itemPos"); 

     saveChanges.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       onSubmit(); 
      } 
     }); 
    } 

    public void onSubmit() { 
     Intent item = new Intent(); 
     item.putExtra("item", editToDo.getText().toString()); 
     item.putExtra("itemPos", itemPos); 
     setResult(RESULT_OK, item); 
     finish(); 
    } 
} 

startActivityForResultとそれに対応する方法私のMainActivityに呼び出されます。

public class MainActivity extends AppCompatActivity { 
    private final int REQUEST_CODE = 10; 
    ArrayList <String> toDoItems = new ArrayList<>(); 
    ArrayAdapter<String> adapter; 
    ListView listItems; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     listItems = (ListView) findViewById(R.id.listViewItems); 
     adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, toDoItems); 
     listItems.setAdapter(adapter); 

     listItems.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> adapter, View item, int position, long id) { 
       toDoItems.remove(position); 
       MainActivity.this.adapter.notifyDataSetChanged(); 
       return true; 
      } 
     }); 

     listItems.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapter, View item, int pos, long id) { 
       Intent intent = new Intent(MainActivity.this, EditItemActivity.class); 
       intent.putExtra("item", toDoItems.get(pos)); 
       intent.putExtra("itemPos", String.valueOf(pos)); 
       startActivityForResult(intent, REQUEST_CODE); 
      } 
     }); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { 
      String item = data.getStringExtra("item"); 
      int itemPosition = Integer.parseInt(data.getStringExtra("itemPos")); 
      toDoItems.set(itemPosition, item); 
      adapter.notifyDataSetChanged(); 
     } 
    } 

    public void addItem(View v){ 
     EditText newItem = (EditText) findViewById(R.id.itemInputEditText); 
     String item = newItem.getText().toString(); 
     adapter.add(item); 
     newItem.setText(""); 
    } 
} 
+0

デバッグを試しましたか? –

+0

編集する項目は1つだけです。編集する項目は1つだけです。複数のアイテムを編集する場合は、EditItemActivityにリストを送信してください –

+0

はい、何も見つかりませんでした。 –

答えて

0

は基本的に私がやったことOğuzhanDöngülのアドバイスを取り、追加しましたその上に。だから私のonActivityResultメソッドでは、これは私がやったことです:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { 
     String item = data.getStringExtra("item"); 
     int itemPosition = Integer.parseInt(data.getStringExtra("itemPos")); 
     toDoItems.add(itemPosition, item); 
     toDoItems.remove(itemPosition + 1); 
     adapter.notifyDataSetChanged(); 
    } 
} 
関連する問題