27

アクションバーのメニューアイテムをキャンセルして保存します。

menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/saveButton" 
          android:showAsAction="always"          
          android:title="@string/save" 
          android:visible="true">

    </item>
    <item android:id="@+id/cancelButton" 
          android:showAsAction="always"         
          android:title="@string/cancel" 
          android:visible="true">        
    </item>

</menu>

アクティビティの開始時にメニュー項目の保存を無効にしたい。

私の活動コード -

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_project);

        EditText projectName = (EditText) findViewById(R.id.editTextProjectName);   
        projectName.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                configureSaveButton(s);             
            }           
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,int after) {}
            @Override
            public void afterTextChanged(Editable s) {}
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.addprojectmenu, menu);      
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        MenuItem item = (MenuItem) findViewById(R.id.saveButton);
        item.setEnabled(false);     
        return super.onPrepareOptionsMenu(menu);
    }

    private void configureSaveButton(CharSequence s){
        String text = null;
        if(s != null){
            text = s.toString();
        }       
        if(text != null && text.trim().length() != 0){

        }else{

        }
    }

ここで私がやろうとしているのは、最初にアクティビティが開始されたときに保存メニュー項目を無効にする必要があり、editext にテキストが含まれている場合は有効にする必要があるということです。

configureSaveButton メソッドの if else のコードがどうあるべきかわかりません。また、最初に保存メニュー項目を無効にするにはどうすればよいですか。

onPrepareOptionsMenu で null ポインター例外が発生します。

私はアンドロイド4.1を使用しています

4

4 に答える 4

30
@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.addprojectmenu, menu);      

    menu.getItem(0).setEnabled(false); // here pass the index of save menu item
    return super.onPrepareOptionsMenu(menu);

}

準備時間にそれを膨らませ、メニューを膨らませた後に無効にするだけinflateoncreateoptionemenu間に合う必要はありません。または、から膨らませた後、最後の2行のコードを使用できますonCreateOptionMenu

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    menu.getItem(0).setEnabled(false); // here pass the index of save menu item
    return super.onPrepareOptionsMenu(menu);

}
于 2013-01-05T05:53:16.087 に答える
16

同じ結果を達成したかったので、この投稿を見つけました。これを機能させるのに完全に役立つ他の回答はありませんでした。いくつかの調査と試行錯誤の後、私は自分の仕事をするようになりました。だから私は私の結果を共有することにしました。

このタスクのために作成した変数:

MenuItem save_btn;
boolean b = false;`

次に、アクションバー メニューを設定します。

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.update_menu_item, menu);
    save_btn = (MenuItem) menu.findItem(R.id.action_save);
    return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu){
    save_btn.setEnabled(b);
    super.onPrepareOptionsMenu(menu);       
    return true;
}

変数boolean bは false として初期化されるためsave_btn、アクティビティの作成時に無効になります。

save_btn@OpenSourceRulzzの使用例を切り替える方法は次のとおりです。

private void updateSaveButton (CharSequence s){
    String text = null;
    if(s != null){
        text = s.toString();
    }
    if(text != null && text.trim().length() != 0){
        b = true;
    }
    else{
        b = false;
    }
}

このメソッドは、@OpenSourceRulzz の例を使用して、ボックスのTextWatcher()関数を介して呼び出されますEditTextonCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_project);

    EditText projectName = (EditText) findViewById(R.id.editTextProjectName);   
    projectName.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            updateSaveButton(s);
            invalidateOptionsMenu();
        }           
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,int after){}
        @Override
        public void afterTextChanged(Editable s) {}
    });
}

パズルの最後のピースは、invalidateOptionsMenu()メソッドを追加することでした。

私が思いついたのは、boolean b変数を使用しての状態を切り替えることでしたsave_btn

于 2013-12-03T16:50:06.837 に答える