onClick()事件与参数混淆

时间:2015-11-04 05:28:00

标签: android android-intent

我的视图有onClick属性:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="hey"
    android:onClick="showCity" />

这与此方法相对应:

public void showCity(View view) {
    Intent intent = new Intent(this, CityActivity.class);
    startActivity(intent);
}

但是,我有一个菜单项,我想打开CityActivity

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_city:
            showCity();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

但是,这不起作用,因为它在调用view时缺少showCity()参数,我不确定在这种情况下它应该是什么。

如何在两种情况下修改它?

6 个答案:

答案 0 :(得分:4)

使用以下代码替换onOptionsItemSelected代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_city:
            showCity(null);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

showCity必须具有View参数,而不能将null作为参数传递给onClick()方法。

答案 1 :(得分:1)

由于您未使用view参数,因此您只需将null传递给它即可使用

答案 2 :(得分:1)

只需通过null,即showCity(null)

答案 3 :(得分:0)

将id属性写入xml中的textview,如下所示,还可以删除TextView的onClick属性:

<TextView
    android:id="@+id/tShowCity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="hey"
    />

现在,在活动的onCreate()方法中,启动TextView,如下所示,并为TextView编写单击侦听器,如下所示:

TextView tv = (TextView)findViewById(R.id.tShowCity);

tv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     showCity();
                }
            });

现在定义您的show city方法,如下所示:

public void showCity() {
    Intent intent = new Intent(this, CityActivity.class);
    startActivity(intent);
}

现在,上述方法也可以在您的菜单中使用,并且可以正常运行:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_city:
            showCity();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

答案 4 :(得分:0)

如果您不想使用View属性..已经答案,您可以将null值传递给您的showCity()

showCity(null); 

但是,如果您想在showCity()中使用特定的视图属性,则可以通过findViewById() method..like传递带有id的视图。

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.action_settings:
        showCity(this.findViewById(R.id.textview1));
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }

}

答案 5 :(得分:0)

如果您没有使用视图,那么为什么要添加方法参数...
    public void showCity(View view){     Intent intent = new Intent(this,CityActivity.class);     startActivity(意向);     }

...看

public void showCity() {
Intent intent = new Intent(this, CityActivity.class);
startActivity(intent);
}

简单..... :)