I have listactivity consist of multiple row each row open activity which contain text and two button one of them open infinite gallery the other one open dialog ,and each dialog had different string ,
i have 20 row so i add dialog 20 times which is redundant , also its work fine but i think there is better approach than what i did ,
any help to get it will be appreciated , thanks
MyDay class:
public class MyDay extends Activity {
final Context context = this;
private Button button;
TextView tv1,tv2,tv3,tv4;
String day;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.Layou
tParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Boolean customTitleSupported =
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.day);
if (customTitleSupported) {
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title); }
initializeTextViews(); }
private void initializeTextViews() {
tv1=(TextView)findViewById(R.id.title_tv1);
tv1.setTypeface(FontFactory.getBFantezy(getBaseContext()));
tv2=(TextView)findViewById(R.id.day_tv1);
tv2.setTypeface(FontFactory.getBFantezy(getBaseContext()));
tv3=(TextView)findViewById(R.id.day_tv3);
tv3.setTypeface(FontFactory.getBFantezy(getBaseContext()));
day=getIntent().getStringExtra("cheese");
if(day.equalsIgnoreCase("Day1")){
tv1.setText("First Day");
tv2.setText(Html.fromHtml(getString(R.string.beginning)));
tv3.setText(Html.fromHtml(getString(R.string.day1)));
button = (Button) findViewById(R.id.city_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// custom dialog
final Dialog dialog = new Dialog(context,R.style.cust_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);
// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.dialog_text);
text.setTypeface(FontFactory.getBFantezy(getBaseContext()));
text.setText(Html.fromHtml(getString(R.string.torusim_places_1)));
Button dialogButton = (Button) dialog.findViewById(R.id.dialog_Button);
dialogButton.setTypeface(FontFactory.getBFantezy(getBaseContext()));
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss();}
});
dialog.show(); }
}); }
else if(day.equalsIgnoreCase("Day2")){
tv1.setText("Second Day");
tv2.setText(Html.fromHtml(getString(R.string.beginning)));
tv3.setText(Html.fromHtml(getString(R.string.day2)));
button = (Button) findViewById(R.id.city_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// custom dialog
final Dialog dialog = new Dialog(context,R.style.cust_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);
TextView text = (TextView) dialog.findViewById(R.id.dialog_text);
text.setTypeface(FontFactory.getBFantezy(getBaseContext()));
text.setText(Html.fromHtml(getString(R.string.torusim_places_2)));
Button dialogButton = (Button) dialog.findViewById(R.id.dialog_Button);
dialogButton.setTypeface(FontFactory.getBFantezy(getBaseContext()));
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss(); }
});
dialog.show(); }
}); }
else if(day.equalsIgnoreCase("Day3")){
tv1.setText("Third Day");
tv2.setText(Html.fromHtml(getString(R.string.beginning)));
tv3.setText(Html.fromHtml(getString(R.string.day3)));
button = (Button) findViewById(R.id.city_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// custom dialog
final Dialog dialog = new Dialog(context,R.style.cust_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);
TextView text = (TextView) dialog.findViewById(R.id.dialog_text);
text.setTypeface(FontFactory.getBFantezy(getBaseContext()));
text.setText(Html.fromHtml(getString(R.string.torusim_places_3)));
Button dialogButton = (Button) dialog.findViewById(R.id.dialog_Button);
dialogButton.setTypeface(FontFactory.getBFantezy(getBaseContext()));
// if button is clicked, close the custom dialog
ialogButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss(); }
});
dialog.show(); }
});
}
}
// this continuing repeated till day 20 //
public void handleClick(View v){
//Create an intent to start the new activity.
Intent intent = new Intent();
intent.setClass(this,DayGallery.class);
intent.putExtra("dayname",day);
startActivity(intent);
}
}
You have a lot of duplicating code. I suggest change intent day indicating extra type to int, and put your text resources into arrays with index = day number - 1.
Also it is easier to read and maintain code if you implement onClickListener interface in your activity class instead of creating new object.
Here is refactored version of your code, much shorter and clearer:
public class MyDay extends Activity implements View.OnClickListener {
private Context mContext = this;
private Button mButton;
private TextView tv1, tv2, tv3, tv4;
private int dayNumber;
private Dialog mDialog;
// this string should be in resources, like other below
private final String[] tv1Resources = {"First day", "Second day", "Third day" , ...};
private final int[] tv3Resources = {R.string.day1, R.string.day2, R.string.day3 , ...};
private final int[] dialogTextResources = {R.string.torusim_places_1, R.string.torusim_places_2, R.string.torusim_places_3 , ...};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Boolean customTitleSupported =
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.day);
if (customTitleSupported) {
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title); }
// note, now you should put integer extra,
//not String, this extra is just day number -1,
//for day1 this is 0, for day2 this is 1 etc.
//In your case, probably this number == item position in listview of
dayNumber = getIntent().getIntExtra("cheese", -1); previous activity
if (dayNumber == -1){
finish(); //this needed if somehow you get invalid extra
return;
}
initializeTextViews();
}
@Override
public void onClick(View v) {
switch (v.getId()){
//actually this switch isn't needed because you have
//only one button in this activity, but I wanted to show,
// how you can maintain many onClick events here
case R.id.city_button:
// custom dialog
// we use class field for avoid making final dialog local variable
mDialog = new Dialog(mContext, R.style.cust_dialog);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.custom_dialog);
// set the custom dialog components - text, image and button
TextView text = (TextView) mDialog.findViewById(R.id.dialog_text);
text.setTypeface(FontFactory.getBFantezy(getBaseContext()));
text.setText(Html.fromHtml(getString(dialogTextResources[dayNumber])));
Button dialogButton = (Button) mDialog.findViewById(R.id.dialog_Button);
dialogButton.setTypeface(FontFactory.getBFantezy(getBaseContext()));
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mDialog != null) mDialog.dismiss(); // check for aviod dialog null pointer
}
});
mDialog.show();
break;
}
}
private void initializeTextViews() {
tv1 = (TextView) findViewById(R.id.title_tv1);
tv1.setTypeface(FontFactory.getBFantezy(getBaseContext()));
tv2 = (TextView) findViewById(R.id.day_tv1);
tv2.setTypeface(FontFactory.getBFantezy(getBaseContext()));
tv3 = (TextView) findViewById(R.id.day_tv3);
tv3.setTypeface(FontFactory.getBFantezy(getBaseContext()));
mButton = (Button) findViewById(R.id.city_button);
mButton.setOnClickListener(this);
tv1.setText(tv1Resources[dayNumber]);
// due to code, this resource is the same for all days
tv2.setText(Html.fromHtml(getString(R.string.beginning)));
tv3.setText(Html.fromHtml(getString(tv3Resources[dayNumber])));
}
public void handleClick(View v) {
// Create an intent to start the new activity.
Intent intent = new Intent();
intent.setClass(this, DayGallery.class);
intent.putExtra("dayname", day);
startActivity(intent);
}
}
Hope this helps.
You could put your dialog creation within a separate method and just call that method from your onClick
of your buttons. something like the following:
if(day.equalsIgnoreCase("Day1")){
tv1.setText("First Day");
tv2.setText(Html.fromHtml(getString(R.string.beginning)));
tv3.setText(Html.fromHtml(getString(R.string.day1)));
button = (Button) findViewById(R.id.city_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
dialogCreation(Html.fromHtml(getString(R.string.torusim_places_1)).toString());
}
else if(day.equalsIgnoreCase("Day2")){.... }
Then your dialogCreation()
could look like:
public void dialogCreation(String arg0) {
// custom dialog
final Dialog dialog = new Dialog(context,R.style.cust_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);
// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.dialog_text);
text.setTypeface(FontFactory.getBFantezy(getBaseContext()));
text.setText(arg0);
Button dialogButton = (Button) dialog.findViewById(R.id.dialog_Button);
dialogButton.setTypeface(FontFactory.getBFantezy(getBaseContext()));
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss();}
});
dialog.show(); }
});
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.