活动按钮没有收听

时间:2017-10-09 22:54:48

标签: android button android-activity fragment onclicklistener

我是Android开发的新手,并创建了一个我坚持使用的小应用程序。

我使用布局activity_main创建了一个活动,并使用MainActivity.java进行了膨胀。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startFragment = new StartFragment();
    getFragmentManager().beginTransaction().replace(R.id.dynamic_view, startFragment).commit();
    setupOnClickListeners();
}

private void setupOnClickListeners() {
    settingsButton = (Button) findViewById(R.id.settings);
    startButton = (Button) findViewById(R.id.keypad);


    settingsButton.setOnClickListener(this);
    startButton.setOnClickListener(this);
}

@Override
public void onClick(View clickView) {
    switch (clickView.getId()) {
        case R.id.keypad: // select audio button
            Log.d(LOG_TAG, "Clicked Start");
            if (startFragment == null) {
                startFragment = new StartFragment();
            }
            getFragmentManager().beginTransaction().replace(R.id.dynamic_view, startFragment).addToBackStack(null).commit();
            break;

        case R.id.settings:
            Log.d(LOG_TAG, "Settings dialpad");
            if (settingsFragment == null) {
                settingsFragment = new SettingsFragment();
            }
            getFragmentManager().beginTransaction().replace(R.id.dynamic_view, settingsFragment).addToBackStack(null).commit();
            break;
    }
}

一旦我夸大了设置片段,我无法重新开始启动片段,在调试日志中我发现点击是通过但不会落在听众身上。

10-10 02:52:24.418 30630-30630/com.avaya.ihg    
D/ViewRootImpl@bcd8f38[MainActivity]: ViewPostImeInputStage processPointer 1
10-10 02:52:24.496 30630-30630/com.avaya.ihg 
D/ViewRootImpl@bcd8f38[MainActivity]: ViewPostImeInputStage processPointer 0

任何可以帮助我的积分? 提前谢谢。

3 个答案:

答案 0 :(得分:0)

好好看看你的代码对我来说似乎有点混乱(不确定你是否已经解释了它?),特别是你设置听众的方式。

从Button的文档中,您应该设置与此类似的侦听器:

button.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
         // Code here executes on main thread after user presses button
     }

从您的代码中看起来您正在将监听器设置为MainActivity,这会给您一个错误。

如果是这种情况,使用onClick()函数,您可能希望将侦听器设置为:

startButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        MainActivity.this.onClick(v);
    }
});

答案 1 :(得分:0)

为什么不使用butterknife库? 您可以将onClick事件设置为不同视图...例如:

@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(View view) {
  if (view.getId() == R.id.door1) {
    Toast.makeText(this, "door1", LENGTH_SHORT).show();
  } else {
    if(view.getId() == R.id.door2){
    Toast.makeText(this, "Try again", LENGTH_SHORT).show();
    }
    .....
  }
}

答案 2 :(得分:0)

我不知道发生了什么,但是在关闭工作室并完全清理并重新运行设备后它才起作用。