【问题标题】:Actionbar back button not functioning as needed操作栏后退按钮无法按需要运行
【发布时间】:2016-03-29 00:55:50
【问题描述】:

我正在尝试制作一个笔记应用程序。基本上,当我单击列表视图中的一个项目时,当项目的名称可编辑时,这将带我进入另一个活动。当我编辑文本并单击操作栏中的后退按钮时,文本应在主活动中更新,但这不会发生;但是当我使用 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) {

}

}

提前谢谢..

【问题讨论】:

  • 您必须通过在第二个活动中覆盖 onOptionsItemSelected(MenuItem item) 来处理 ActionBar 后退按钮。
  • 当我创建第二个活动时,我使用层次结构选项将后退按钮设置为第一个活动。

标签: android android-actionbar


【解决方案1】:

请务必在清单中将 meta-data 标记和 android:parentActivityName 属性添加到您的子活动声明中,如下所示:

 <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 及更高级别只需,则需要 android:parentActivityName 属性

【讨论】:

  • 谢谢,但是后退按钮已经可以使用了;但是,当我返回主要活动时,我发现列表中的元素并没有随着我更改备忘录中的文本而改变,但如果我使用 android 按钮返回,它实际上确实发生了变化。
  • 您是否尝试将 notifyDataSetChanged 调用移至 MainActivity 的 onResume 回调?
猜你喜欢
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2015-02-27
  • 2017-06-25
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
相关资源
最近更新 更多