Reputation: 59
How can you make it so that user can have several buttons with on click listeners. I tried it with 2 buttons, but it said that I had already defined the on-click listener so I could not make another on click listener as a result. The code I have so far is:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
private View btnRender;
private LinearLayout container;
private View btnRendered;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnRender = (View)findViewById(R.id.btn_render);
container = (LinearLayout)findViewById(R.id.fragment_layout);
btnRendered = (View) findViewById(R.id.btn_rendered);
//set event handling for button
btnRender.setOnClickListener(onClickListener());
}
private View.OnClickListener onClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
//replace fragment when clicked
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_layout, new PDFRenderFragment());
ft.commit();
//gone button after all
btnRender.setVisibility(View.GONE);
container.setVisibility(View.VISIBLE);
}
};
}
}
The btn_rendered
is the other button that I want to set an on click listener for, but the software will not let me do this. Is it true that I need to set up a switch-case method for it to work?
I just tried out both codes and none of them seem to have doen the desired effect. Now whenever I click one of the buttons, the 2nd pdf always shows! (what I was using the button for)
Upvotes: 2
Views: 97
Reputation: 33238
You can use same method for second button too and use if/else condition for identify which button is click in that method. like below code.
//set event handling for button
btnRender.setOnClickListener(onClickListener());
second_btn.setOnClickListener(onClickListener());
Your onClickListener Method.
private View.OnClickListener onClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
//replace fragment when clicked
if (v == btnRender) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_layout, new PDFRenderFragment());
ft.commit();
//gone button after all
btnRender.setVisibility(View.GONE);
container.setVisibility(View.VISIBLE);
} else if (v == second_btn) {
//second button click code
}
}
};
}
Upvotes: 0
Reputation: 8149
You can handle like below.
btnRender.setOnClickListener(onClickListener());
btnRendered.setOnClickListener(onClickListener());
private View.OnClickListener onClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_render:
//replace fragment when clicked
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_layout, new PDFRenderFragment());
ft.commit();
//gone button after all
btnRender.setVisibility(View.GONE);
container.setVisibility(View.VISIBLE);
break;
case R.id.btn_rendered:
// your logic here
break;
}
}
};
}
Upvotes: 1