2016-03-28 2 views
2

Я пытаюсь сделать заметку. В основном, когда я нажимаю на элемент в представлении списка, это приведет меня к другому действию, когда имя элемента доступно для редактирования. Когда я редактирую текст и нажимаю кнопку «Назад» на панели действий, текст должен быть обновлен в основном действии, однако этого не происходит; но когда я использую кнопку обратной связи Android (один из устройств), она работает нормально.Кнопка активации панели действий не работает по мере необходимости

вот мой код

public class MainActivity extends AppCompatActivity { 

ListView MemoContent ; 
static ArrayList<String> MyArray ; 
static ArrayAdapter MyAdapter ; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    MemoContent = (ListView) findViewById(R.id.MemoContent) ; 
    MyArray = new ArrayList<>() ; 
    MyArray.add("Example Note") ; 

    MyAdapter = new ArrayAdapter(this , android.R.layout.simple_list_item_1 , MyArray); 
    MemoContent.setAdapter(MyAdapter); 

    MemoContent.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent i = new Intent(getApplicationContext() , EditMemo.class) ; 
      i.putExtra("note" , position) ; 
      startActivity(i); 


     } 
    }); 

} 

и вот второе действие

public class EditMemo extends AppCompatActivity implements TextWatcher { 

EditText editText ; 
int id; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_edit_memo); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    editText = (EditText) findViewById(R.id.editText) ; 

    Intent j = getIntent() ; 
    id = j.getIntExtra("note" , -1) ; 
    if(id!=-1) 
    { 
     editText.setText(MainActivity.MyArray.get(id)); 
    } 

    editText.addTextChangedListener(this); 
} 


@Override 
public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

} 

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 

    MainActivity.MyArray.set(id , String.valueOf(s)) ; 
    MainActivity.MyAdapter.notifyDataSetChanged(); 

} 

@Override 
public void afterTextChanged(Editable s) { 

} 

}

Заранее спасибо ..

+0

Вы должны обрабатывать ActionBar назад, переопределив 'onOptionsItemSelected (элемент MenuItem)' в вашем втором действии. –

+0

Когда я создал второе действие, я использовал параметр иерархии, чтобы установить кнопку «Назад» на первую активность. –

ответ

1

Будьте уверены, чтобы добавить мета- данные тег и android: par entActivityName атрибут вашей декларации активности ребенка в манифесте следующим образом:

<activity 
     android:name=".EditMemo" 
     android:parentActivityName=".MainActivity"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="full.package.name.to.MainActivity" /> 
    </activity> 

Если вы ориентируетесь уровень API 16 и выше простоандроида: parentActivityName атрибут необходим

+0

Спасибо, но кнопка «Назад» уже работает; однако, когда я вернусь к основному действию, я обнаружил, что элемент в списке не изменился, поскольку я изменяю текст в записке, но если я вернусь с кнопкой андроида, это действительно изменится. –

+0

Вы пытались переместить вызов notifyDataSetChanged на обратный вызов onResume MainActivity? –

Смежные вопросы