Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ActionBar点击开关按钮Android_Android_Android Actionbar - Fatal编程技术网

ActionBar点击开关按钮Android

ActionBar点击开关按钮Android,android,android-actionbar,Android,Android Actionbar,单击actionbar上的开关按钮时出现问题。这是我的密码 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

单击actionbar上的开关按钮时出现问题。这是我的密码

public class MainActivity extends ActionBarActivity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main, menu);
        MenuItem item = menu.findItem(R.id.abc);
        item.setActionView(R.layout.testing);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.abc:
                Toast.makeText(getApplicationContext(), "ABOUT.", Toast.LENGTH_SHORT).show();
            break;
        }
        return super.onOptionsItemSelected(item);
    }
}
我的菜单:主菜单

<item
    android:id="@+id/abc"
    app:showAsAction="ifRoom"
    app:actionLayout="@layout/test"
    android:title=""/>
开关按钮的设计和布局:

<android.support.v7.widget.SwitchCompat
    android:id="@+id/switchForActionBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="" />

当我点击开关按钮时,这个土司没有显示出来。有什么帮助吗?

这是因为您尚未为SwitchCompat视图定义OnTouchListener

将onCreate方法代码更改为

public class MainActivity extends ActionBarActivity {

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

        SwitchCompat switchCompat = (SwitchCompat) findViewById(R.id.switchForActionBar);
        switchCompat.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                Toast.makeText(this, "ABOUT.", Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }
...
}
为什么要这么做

从选项菜单中选择id为abc的项目时,将显示Toast消息

public class MainActivity extends ActionBarActivity {

//declare the global variable switchcompat
 SwitchCompat switchCompat;

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

    //contruct the object from yhe one declared in the xml
    switchCompat = (SwitchCompat) findViewById(R.id.switchForActionBar);

    //set the onClickListener that define what to do when the view is                  clicked
    switchCompat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(this, "Some message here",                                     Toast.LENGTH_SHORT).show();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);
    MenuItem item = menu.findItem(R.id.abc);
    item.setActionView(R.layout.testing);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.abc:
            Toast.makeText(getApplicationContext(), "ABOUT.", Toast.LENGTH_SHORT).show();
        break;
    }
    return super.onOptionsItemSelected(item);
}
在您的代码中,没有证据表明当您单击开关按钮时将触发某个操作

对于每个按钮-开关按钮-图像按钮等。。。您应该创建button对象,并设置单击按钮时要执行的操作

OptionItemSelected方法仅处理标准选项菜单

public class MainActivity extends ActionBarActivity {

//declare the global variable switchcompat
 SwitchCompat switchCompat;

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

    //contruct the object from yhe one declared in the xml
    switchCompat = (SwitchCompat) findViewById(R.id.switchForActionBar);

    //set the onClickListener that define what to do when the view is                  clicked
    switchCompat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(this, "Some message here",                                     Toast.LENGTH_SHORT).show();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);
    MenuItem item = menu.findItem(R.id.abc);
    item.setActionView(R.layout.testing);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.abc:
            Toast.makeText(getApplicationContext(), "ABOUT.", Toast.LENGTH_SHORT).show();
        break;
    }
    return super.onOptionsItemSelected(item);
}

}

当我添加它时:由以下原因引起:java.lang.NullPointerException:尝试调用虚拟方法'void android.support.v7.widget.SwitchCompat.setOnClickListener'