Button Listener not get registered on first click

2019-02-25 14:57发布

As i am new to android here i got the problem for button listeners I am using OnClickListener for busttons but it doesnot performs after first click once i click more than one it performs well but how to make it possible on first click it self here is my code:

public class DashbordActivity extends Activity implements OnClickListener{

ImageButton btnLogout, btnSearch, btnOENew, btnAENew,btnSync;
// Session Manager Class
SessionManager session = null;

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

    // Session Manager
    session = new SessionManager(getApplicationContext());

    /* Action Bar Color change on create*/
    ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#FF7F24"));
    ActionBar actionBar = getActionBar();
    actionBar.setBackgroundDrawable(colorDrawable);

    /* get Resources from Xml  file */
    btnOENew = (ImageButton) findViewById(R.id.btnOENew);
    btnAENew = (ImageButton) findViewById(R.id.btnAENew);
    btnSearch = (ImageButton) findViewById(R.id.btnSearch);     
    btnLogout = (ImageButton) findViewById(R.id.btnLogout);
    btnSync = (ImageButton)findViewById(R.id.btnSync);

    addButtonListener();// on click any button
}
    // on click any button
private void addButtonListener() {
    // Find our button and hook-up the click routine
    btnOENew.setOnClickListener(this);
    btnSearch.setOnClickListener(this);     
    btnAENew.setOnClickListener(this);
    btnLogout.setOnClickListener(this);
    btnSync.setOnClickListener(this);
}

// on click any button
@Override
public void onClick(View v) {
    btnOENew.setOnClickListener(new OnClickListener() {         
        public void onClick(View v) {
            Intent intent = new Intent(getBaseContext(),           OceanSalesActivity.class);
            startActivity(intent);
        }
    });

    btnAENew.setOnClickListener(new OnClickListener() {         
        public void onClick(View v) {
            Intent intent = new Intent(getBaseContext(), AirSalesActivity.class);
            startActivity(intent);
        }
    });

    btnSearch.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getBaseContext(), SearchActivity.class);
            startActivity(intent);
        }
    });


    btnLogout.setOnClickListener(new OnClickListener() {            
        public void onClick(View v) {               
            onLogout();
        }
    });

    btnSync.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent( getBaseContext() , SyncActivity.class);                                                
            startActivity(intent);
        }
    });
}

3条回答
ゆ 、 Hurt°
2楼-- · 2019-02-25 15:41

Why do you need annonymous inner class when you have

 btnOENew.setOnClickListener(this);

and your class implements OnClickListener

All you need is switch case in onClick

@Override
public void onClick(View v) {

    switch(v.getId())
     {
       case R.id.btnOENew :
           // button btnOENew clicked
       break;
       case R.id.btnAENew :
            // button btnAENew clicked  
       break;
       ... // similar for other buttons
      }
}
查看更多
可以哭但决不认输i
3楼-- · 2019-02-25 15:46

**

try this

**

 public class DashbordActivity extends Activity {

ImageButton btnLogout, btnSearch, btnOENew, btnAENew,btnSync;
// Session Manager Class
SessionManager session = null;

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

// Session Manager
session = new SessionManager(getApplicationContext());

/* Action Bar Color change on create*/
ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#FF7F24"));
ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(colorDrawable);

/* get Resources from Xml  file */
btnOENew = (ImageButton) findViewById(R.id.btnOENew);
btnAENew = (ImageButton) findViewById(R.id.btnAENew);
btnSearch = (ImageButton) findViewById(R.id.btnSearch);     
btnLogout = (ImageButton) findViewById(R.id.btnLogout);
btnSync = (ImageButton)findViewById(R.id.btnSync);
 btnOENew.setOnClickListener(new OnClickListener() {         
    public void onClick(View v) {
        Intent intent = new Intent(getBaseContext(),           OceanSalesActivity.class);
        startActivity(intent);
    }
});

btnAENew.setOnClickListener(new OnClickListener() {         
    public void onClick(View v) {
        Intent intent = new Intent(getBaseContext(), AirSalesActivity.class);
        startActivity(intent);
    }
});

btnSearch.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(getBaseContext(), SearchActivity.class);
        startActivity(intent);
    }
});


btnLogout.setOnClickListener(new OnClickListener() {            
    public void onClick(View v) {               
        onLogout();
    }
});

btnSync.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent( getBaseContext() , SyncActivity.class);                                                
        startActivity(intent);
    }
});



}
查看更多
Luminary・发光体
4楼-- · 2019-02-25 15:54

You are registering the listeners for the button two times..After first click on the button you again registering button with original listener..Remove all the button onClick methods and change your code like this..

// on click any button
@Override
public void onClick(View v) {
    if (v.getId() == R.id.btnOENew) {
        Intent intent = new Intent(getBaseContext(),
                OceanSalesActivity.class);
        startActivity(intent);
    } else if (v.getId() == R.id.btnAENew) {
        Intent intent = new Intent(getBaseContext(), AirSalesActivity.class);
        startActivity(intent);
    } else if (v.getId() == R.id.btnSearch) {
        Intent intent = new Intent(getBaseContext(), SearchActivity.class);
        startActivity(intent);
    } else if (v.getId() == R.id.btnLogout) {
        onLogout();
    } else if (v.getId() == R.id.btnSync) {
        Intent intent = new Intent(getBaseContext(), SyncActivity.class);
        startActivity(intent);
    }
}
查看更多
登录 后发表回答