Hello community,
I've got a ListActivity in my app, which shows Views including TextViews, for showing artist, title and album information of some mp3-Files (queried by my cursor), and an ImageView, for showing an albumart => Similar to the Tracklist in the music app.
Here's the code for my custom SimpleCursorAdapter and it's binding to the ListView:
Code:
void setListAdapterOverride() {
String[] fromColumns = new String[] {
AudioColumns.ARTIST,
MediaColumns.TITLE,
AudioColumns.ALBUM,
AudioColumns.ALBUM_ID
};
int[] toColumns = new int[] {
R.id.tv_artist,
R.id.tv_title,
R.id.tv_album,
R.id.iv_albumArt
};
cursorAdapter = new customAdapter(getBaseContext(), R.layout.listviewitem, cursor, fromColumns, toColumns);
setListAdapter(cursorAdapter);
if (MyDebug.Log)
Log.d("Activity", "ListAdapter gesetzt");
}
class customAdapter extends SimpleCursorAdapter {
int layout;
Cursor cursor;
String[] from;
int[] to;
public customAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
this.layout = layout;
this.cursor = c;
this.from = from;
this.to = to;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.listviewitem, parent, false);
if (MyDebug.Log)
Log.d("Activity", "Inflate");
}
cursor.moveToPosition(position);
TextView artist = (TextView) row.findViewById(to[0]);
TextView title = (TextView) row.findViewById(to[1]);
TextView album = (TextView) row.findViewById(to[2]);
ImageView albumArt = (ImageView) row.findViewById(to[3]);
artist.setText(cursor.getString(cursor.getColumnIndex(from[0])));
title.setText(cursor.getString(cursor.getColumnIndex(from[1])));
album.setText(cursor.getString(cursor.getColumnIndex(from[2])));
Cursor albumArtCursor = contentResolver.query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART }, MediaStore.Audio.Albums._ID + "='" + cursor.getInt(cursor.getColumnIndex(from[3])) + "'", null, null);
albumArtCursor.moveToFirst();
String albumArtUri = albumArtCursor.getString(albumArtCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
if (albumArtUri == null) albumArtUri = "default";
if (!imageCache.containsKey(albumArtUri)) {
Bitmap albumArtBitmap;
if (!albumArtUri.equals("default")) {
Options opts = new Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(albumArtUri, opts);
Integer[] bitmapSize = new Integer[] { opts.outWidth, opts.outHeight };
Integer scaleFactor = 1;
while ((bitmapSize[0]/2 > 50) && (bitmapSize[1]/2 > 50)) {
scaleFactor++;
bitmapSize[0] /= 2;
bitmapSize[1] /= 2;
}
opts = new Options();
opts.inSampleSize = scaleFactor;
albumArtBitmap = BitmapFactory.decodeFile(albumArtUri, opts);
} else {
albumArtBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_mp_song_list);
}
imageCache.put(albumArtUri, albumArtBitmap);
}
albumArt.setImageBitmap(imageCache.get(albumArtUri));
return row;
}
}
imageCache is a Hashmap<String, Bitmap> for caching the Bitmaps, so they don't have to be decoded from file again when they had been cached before.
In a former version of the code, I didn't have the imageCache, so the albumarts were decoded from file everytime a new row has been added. That slowed down ListView-scrolling. By adding the imageCache scrolling in ListView doesn't lag that much as before, but it's lagging a bit sometimes.
Can anyone help me to further optimize my code to completely prevent lagging when I scroll the ListView?
Thanks regards ChemDroid
I have a fragment, which contains a button that when pressed loads a new fragment. The new fragment runs an async task to populate a listview with data.
I am running into trouble, trying to load a new fragment from the onClick. The problem is I can not get the getFragmentManager();
My async task looks like this:
Code:
public class GetStyleStatisticsJSON extends AsyncTask<String, Void, String> {
Context c;
private ProgressDialog Dialog;
android.support.v4.app.Fragment Fragment_one;
public GetStyleStatisticsJSON(Context context)
{
c = context;
Dialog = new ProgressDialog(c);
}
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
return readJSONFeed(arg0[0]);
}
protected void onPreExecute() {
Dialog.setMessage("Analyzing Statistics");
Dialog.setTitle("Loading");
Dialog.setCancelable(false);
Dialog.show();
}
protected void onPostExecute(String result){
//decode json here
try{
JSONArray jsonArray = new JSONArray(result);
//acces listview
ListView lv = (ListView) ((Activity) c).findViewById(R.id.yourStyleStatistics);
//make array list for beer
final List<StyleInfo> tasteList = new ArrayList<StyleInfo>();
for(int i = 0; i < jsonArray.length(); i++) {
String style = jsonArray.getJSONObject(i).getString("style");
String rate = jsonArray.getJSONObject(i).getString("rate");
String beerID = jsonArray.getJSONObject(i).getString("id");
int count = i + 1;
style = count + ". " + style;
//create object
StyleInfo tempTaste = new StyleInfo(style, rate, beerID);
//add to arraylist
tasteList.add(tempTaste);
//add items to listview
StyleInfoAdapter adapter1 = new StyleInfoAdapter(c ,R.layout.brewer_stats_listview, tasteList);
lv.setAdapter(adapter1);
//set up clicks
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
StyleInfo o=(StyleInfo)arg0.getItemAtPosition(arg2);
String bID = o.id;
//todo: add onclick for fragment to load
FragmentManager man= (Activity)c.getFragmentManager();
FragmentTransaction tran = man.beginTransaction();
Fragment_one = new StylePage2();
final Bundle bundle = new Bundle();
bundle.putString("beerIDSent", bID);
Fragment_one.setArguments(bundle);
tran.replace(R.id.main, Fragment_one);//tran.
tran.addToBackStack(null);
tran.commit();
}
});
}
}
catch(Exception e){
}
Dialog.dismiss();
}
public String readJSONFeed(String URL) {
StringBuilder stringBuilder = new StringBuilder();
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(URL);
try {
HttpResponse response = httpClient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
inputStream.close();
} else {
Log.d("JSON", "Failed to download file");
}
} catch (Exception e) {
Log.d("readJSONFeed", e.getLocalizedMessage());
}
return stringBuilder.toString();
}
}
can not resolve method FragmentManager() is the error I am receiving
Hi,
To be able to call getFragmentManager() or getSupportFragmentManager() you'll need to use FragmentActivity, so what I would do is:
1. Make sure the activity that calls the asycTask is a FragmentActivity.
2. Pass this actvity to the asycTask.
Something like: (asyncTask method)
setActivity(Activity activity)
{
fm = activity.getFragmentManager();
}
mrsegev said:
Hi,
To be able to call getFragmentManager() or getSupportFragmentManager() you'll need to use FragmentActivity, so what I would do is:
1. Make sure the activity that calls the asycTask is a FragmentActivity.
2. Pass this actvity to the asycTask.
Something like: (asyncTask method)
setActivity(Activity activity)
{
fm = activity.getFragmentManager();
}
Click to expand...
Click to collapse
thats the problem, I launch the asyncTask from a fragment....
Oh! So you'll access your activity like this:
getActivity().getFragmentManager();
I have an async task that loads a list view of items. I am currently trying to set the onClick to load a new fragment with an "id" that is being retrieved from the list item that is clicked. I have no errors in my code that the Android Studio shows me.
When I run the app and click on the item in the list view I get this FC:
02-13 19:49:56.813 20334-20334/com.beerportfolio.beerportfoliopro E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.beerportfolio.beerportfoliopro.ReadJSONResult$1.onItemClick(ReadJSONResult.java:140)
at android.widget.AdapterView.performItemClick(AdapterView.java:298)
at android.widget.AbsListView.performItemClick(AbsListView.java:1237)
at android.widget.ListView.performItemClick(ListView.java:4555)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3037)
at android.widget.AbsListView$1.run(AbsListView.java:3724)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:5789)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:843)
at dalvik.system.NativeStart.main(Native Method)
02-13 19:50:42.112 20864-20870/? E/jdwp﹕ Failed sending reply to debugger: Broken pipe
line 140 in ReadJSONResult is:
listenerBeer.onArticleSelected(idToSend);
That line is part of this whole onClick:
//set up clicks
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
BeerData beerInfo = beerList.get(arg2);
String idToSend = beerInfo.beerId;
//todo: launch beer fragment
listenerBeer.onArticleSelected(idToSend);
}
});
All the code for ReadJSONResult is:
public class ReadJSONResult extends AsyncTask<String, Void, String> {
Context c;
private ProgressDialog Dialog;
public ReadJSONResult(Context context)
{
c = context;
Dialog = new ProgressDialog(c);
}
//code for on click
OnArticleSelectedListener listenerBeer;
public interface OnArticleSelectedListener{
public void onArticleSelected(String myString);
}
public void setOnArticleSelectedListener(OnArticleSelectedListener listener){
this.listenerBeer = listener;
}
//end code for onClick
@override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
return readJSONFeed(arg0[0]);
}
protected void onPreExecute() {
Dialog.setMessage("Searching Beer Cellar");
Dialog.setTitle("Loading");
Dialog.setCancelable(false);
Dialog.show();
}
protected void onPostExecute(String result){
//decode json here
try{
JSONObject json = new JSONObject(result);
//acces listview
ListView lv = (ListView) ((Activity) c).findViewById(android.R.id.list);
//make array list for beer
final List<BeerData> beerList = new ArrayList<BeerData>();
//get json items
for(int i = 0; i < json.getJSONArray("data").length(); i++) {
String beerId = GetBeerDataFromJSON(i,"id", json);
String beerName = GetBeerDataFromJSON(i,"name", json);
String beerDescription = GetBeerDataFromJSON(i,"description" , json);
String beerAbv = GetBeerDataFromJSON(i,"abv" , json);
String beerIbu = GetBeerDataFromJSON(i,"ibu" , json);
String beerIcon = GetBeerIconsFromJSON(i, "icon",json );
String beerMediumIcon = GetBeerIconsFromJSON(i, "medium",json );
String beerLargeIcon = GetBeerIconsFromJSON(i, "large",json );
String beerGlass = GetBeerGlassFromJSON(i, json );
String beerStyle = GetBeerStyleFromJSON(i,"name", json );
String beerStyleDescription = GetBeerStyleFromJSON(i,"description", json );
String beerBreweryId = GetBeerBreweryInfoFromJSON(i, "id", json );
String beerBreweryName = GetBeerBreweryInfoFromJSON(i, "name", json );
String beerBreweryDescription = GetBeerBreweryInfoFromJSON(i, "description", json );
String beerBreweryWebsite = GetBeerBreweryInfoFromJSON(i, "website", json );
//get long and latt
String beerBreweryLat = GetBeerBreweryLocationJSON(i, "longitude", json );
String beerBreweryLong = GetBeerBreweryLocationJSON(i, "latitude", json );
String beerBreweryYear = GetBeerBreweryInfoFromJSON(i, "established", json );
String beerBreweryIcon = GetBeerBreweryIconsFromJSON(i,"large",json);
//create beer object
BeerData thisBeer = new BeerData(beerName, beerId, beerDescription, beerAbv, beerIbu, beerIcon,
beerMediumIcon,beerLargeIcon, beerGlass, beerStyle, beerStyleDescription, beerBreweryId, beerBreweryName,
beerBreweryDescription, beerBreweryYear, beerBreweryWebsite,beerBreweryIcon, beerBreweryLat, beerBreweryLong);
//add beer to list
beerList.add(thisBeer);
}
//update listview
BeerSearchAdapter adapter1 = new BeerSearchAdapter(c ,R.layout.listview_item_row, beerList);
lv.setAdapter(adapter1);
//set up clicks
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
BeerData beerInfo = beerList.get(arg2);
String idToSend = beerInfo.beerId;
//todo: launch beer fragment
listenerBeer.onArticleSelected(idToSend);
}
});
}
catch(Exception e){
}
Dialog.dismiss();
}
//todo: all the get functions go here
private String GetBeerDataFromJSON(int position, String whatToGet, JSONObject json ) {
String whatIsTheKeyYouAreLookFor = whatToGet;
int whereInTheJSONArrayForLoopIsTheData = position;
String holder = "";
try{
holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getString(whatIsTheKeyYouAreLookFor);
} catch (JSONException e) {
holder = "N/A";
}
return holder;
}
//get icons
private String GetBeerBreweryIconsFromJSON(int position, String whatToGet, JSONObject json ) {
String whatIsTheKeyYouAreLookFor = whatToGet;
int whereInTheJSONArrayForLoopIsTheData = position;
String holder = "";
try{
holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getJSONArray("breweries").getJSONObject(0).getJSONObject("images").getString(whatIsTheKeyYouAreLookFor);;
} catch (JSONException e) {
holder = "N/A";
}
return holder;
}
//get icons
private String GetBeerIconsFromJSON(int position, String whatToGet, JSONObject json ) {
String whatIsTheKeyYouAreLookFor = whatToGet;
int whereInTheJSONArrayForLoopIsTheData = position;
String holder = "";
try{
holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getJSONObject("labels").getString(whatIsTheKeyYouAreLookFor);
} catch (JSONException e) {
holder = "N/A";
}
return holder;
}
//get style information
private String GetBeerStyleFromJSON(int position, String whatToGet, JSONObject json ) {
String whatIsTheKeyYouAreLookFor = whatToGet;
int whereInTheJSONArrayForLoopIsTheData = position;
String holder = "";
try{
holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getJSONObject("style").getString(whatIsTheKeyYouAreLookFor);
} catch (JSONException e) {
holder = "N/A";
}
return holder;
}
//get location data
private String GetBeerBreweryLocationJSON(int position, String whatToGet, JSONObject json ) {
String whatIsTheKeyYouAreLookFor = whatToGet;
int whereInTheJSONArrayForLoopIsTheData = position;
String holder = "";
try{
holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getJSONArray("breweries").getJSONObject(0).getJSONArray("locations").getJSONObject(0).getString(whatIsTheKeyYouAreLookFor);
} catch (JSONException e) {
holder = "N/A";
}
return holder;
}
//get brewery information
//get style information
private String GetBeerBreweryInfoFromJSON(int position, String whatToGet, JSONObject json ) {
String whatIsTheKeyYouAreLookFor = whatToGet;
int whereInTheJSONArrayForLoopIsTheData = position;
String holder = "";
try{
holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getJSONArray("breweries").getJSONObject(0).getString(whatIsTheKeyYouAreLookFor);
} catch (JSONException e) {
holder = "N/A";
}
return holder;
}
//get glass
private String GetBeerGlassFromJSON(int position, JSONObject json ) {
int whereInTheJSONArrayForLoopIsTheData = position;
String holder = "";
try{
holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getJSONObject("glass").getString("name");
} catch (JSONException e) {
holder = "N/A";
}
return holder;
}
public String readJSONFeed(String URL) {
StringBuilder stringBuilder = new StringBuilder();
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(URL);
try {
HttpResponse response = httpClient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
inputStream.close();
} else {
Log.d("JSON", "Failed to download file");
}
} catch (Exception e) {
Log.d("readJSONFeed", e.getLocalizedMessage());
}
return stringBuilder.toString();
}
}
BeerSearchAdapter is:
public class BeerSearchAdapter extends ArrayAdapter<BeerData> {
Context context;
int layoutResourceId;
List<BeerData> data = null;
public BeerSearchAdapter(Context context, int layoutResourceId, List<BeerData> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
beerHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new beerHolder();
holder.txtBrewery = (TextView)row.findViewById(R.id.beerBreweryNameList);
holder.txtTitle = (TextView)row.findViewById(R.id.beerNameList);
row.setTag(holder);
}
else
{
holder = (beerHolder)row.getTag();
}
BeerData beer = data.get(position);
holder.txtTitle.setText(beer.beerName);
holder.txtBrewery.setText(beer.beerBreweryName);
return row;
}
static class beerHolder
{
TextView txtBrewery;
TextView txtTitle;
}
}
My Search.java where the interface comes form is here:
public class Search extends Fragment implements SearchView.OnQueryTextListener, ReadJSONResult.OnArticleSelectedListener {
private ListView lv;
View v;
@override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//set layout here
v = inflater.inflate(R.layout.activity_search, container, false);
setHasOptionsMenu(true);
getActivity().setTitle("Search");
//get user information
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String userName = prefs.getString("userName", null);
String userID = prefs.getString("userID", null);
//todo: code body goes here
// Inflate the layout for this fragment
return v;
}
@override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
// Inflate the menu; this adds items to the action bar if it is present.
super.onCreateOptionsMenu(menu, inflater);
Log.d("click", "inside the on create");
//inflater.inflate(R.menu.main, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search2).getActionView();
searchView.setIconified(false);
searchView.setOnQueryTextListener(this);
}
public boolean onQueryTextSubmit (String query) {
//toast query
//make json variables to fill
// url to make request
String url = "myURL";
try {
query = URLEncoder.encode(query, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String jsonUrl = url + query;
//todo: get json
new ReadJSONResult(getActivity()).execute(jsonUrl);
return false;
}
@override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
return false;
}
@override
public void onArticleSelected(String b){
//code to execute on click
Fragment Fragment_one;
FragmentManager man= getFragmentManager();
FragmentTransaction tran = man.beginTransaction();
//todo: set to beer fragment
Fragment_one = new StylePage2();
final Bundle bundle = new Bundle();
bundle.putString("beerIDSent", b);
Fragment_one.setArguments(bundle);
tran.replace(R.id.main, Fragment_one);//tran.
tran.addToBackStack(null);
tran.commit();
}
}
Let me know if you need any other code, I am stomped on this and could use a second pair of eyes. Thanks.
In my app there is an activity say Activity A which has an image view with some text views. code is listed below
Code:
public class EidCardFinal extends Activity {
private ImageView imageView;
private TextView receiver, sender, messagebody;
private Intent intent;
private Bundle bundle;
private static final int FONT_SELECT = 1;
// public String filepath = "MyFileStorage";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_eid_card_final);
intent = getIntent();
String message1 = intent.getStringExtra("RECEIVER");
String message2 = intent.getStringExtra("SENDER");
String message3 = intent.getStringExtra("MESSAGEBODY");
String check_click = intent.getStringExtra("bttnclick");
imageView = (ImageView) findViewById(R.id.imageView1);
receiver = (TextView) findViewById(R.id.textView1);
sender = (TextView) findViewById(R.id.textView2);
messagebody = (TextView) findViewById(R.id.textView3);
receiver.setText(message1);
sender.setText(message2);
messagebody.setText(message3);
// Selected image id
if ("BUTTONCLICK".equals(check_click)) {
String path = intent.getStringExtra("image");
Uri myUri = Uri.parse(path);
imageView.setImageURI(myUri);
} else {
int position = intent.getExtras().getInt("id");
ImageAdapter imageAdapter = new ImageAdapter(this);
// ImageView imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setImageResource(imageAdapter.thumbIds[position]);
case R.id.change_fonts:
Intent fontintent = new Intent();
bundle = getIntent().getExtras();
fontintent.putExtras(bundle);
fontintent.setClass(getApplicationContext(), FontSelection.class);
this.startActivityForResult(fontintent, FONT_SELECT);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == FONT_SELECT) {
Bundle pathadd= data.getExtras();
String fontadd = pathadd.getString("FONTPATH");
//intent = getIntent();
/*String message1 = data.getStringExtra("RECEIVER");
String message2 = data.getStringExtra("SENDER");
String message3 = data.getStringExtra("MESSAGEBODY");
//String check_click = intent.getStringExtra("bttnclick");
imageView = (ImageView) findViewById(R.id.imageView1);
receiver = (TextView) findViewById(R.id.textView1);
sender = (TextView) findViewById(R.id.textView2);
messagebody = (TextView) findViewById(R.id.textView3);
receiver.setText(message1);
sender.setText(message2);
messagebody.setText(message3);*/
//bundle = getIntent().getExtras();
Typeface tyfa = Typeface.createFromAsset(getAssets(), fontadd);
receiver.setTypeface(tyfa);
sender.setTypeface(tyfa);
messagebody.setTypeface(tyfa);
From menu, user is taken to another activity say Activity B from where a custom font can be selected for Activity A. Code is listed below
Code:
public class FontSelection extends Activity {
String[] fontpath = { "fonts/android_7.ttf", "fonts/doridrobot.ttf",
"fonts/droidsansmono.ttf", "fonts/droidserif-bold.ttf",
"fonts/green-avocado.ttf", "fonts/lokicola.ttf",
"fonts/outwrite.ttf", "fonts/painting-the-light.ttf",
"fonts/roboto-black.ttf", "fonts/roboto-boldcondensed.ttf",
"fonts/roboto-medium.ttf", "fonts/roboto-regular.ttf" };
String[] fontname = { "android_7", "doridrobot", "droidsansmono",
"droidserif-bold", "green-avocado", "lokicola", "outwrite",
"painting-the-light", "roboto-black", "roboto-boldcondensed",
"roboto-medium", "roboto-regular" };
private Intent fontpathintent = new Intent();
private Bundle bundle1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_font_selection);
RadioButton radio1 = (RadioButton) findViewById(R.id.radioButton1);
Typeface tf1 = Typeface.createFromAsset(getAssets(), fontpath[0]);
radio1.setTypeface(tf1);
radio1.setText(fontname[0]);
RadioButton radio2 = (RadioButton) findViewById(R.id.radioButton2);
Typeface tf2 = Typeface.createFromAsset(getAssets(), fontpath[1]);
radio2.setTypeface(tf2);
radio2.setText(fontname[1]);
RadioButton radio3 = (RadioButton) findViewById(R.id.radioButton3);
Typeface tf3 = Typeface.createFromAsset(getAssets(), fontpath[2]);
radio3.setTypeface(tf3);
radio3.setText(fontname[2]);
RadioButton radio4 = (RadioButton) findViewById(R.id.radioButton4);
Typeface tf4 = Typeface.createFromAsset(getAssets(), fontpath[3]);
radio4.setTypeface(tf4);
radio4.setText(fontname[3]);
RadioButton radio5 = (RadioButton) findViewById(R.id.radioButton5);
Typeface tf5 = Typeface.createFromAsset(getAssets(), fontpath[4]);
radio5.setTypeface(tf5);
radio5.setText(fontname[4]);
RadioButton radio6 = (RadioButton) findViewById(R.id.radioButton6);
Typeface tf6 = Typeface.createFromAsset(getAssets(), fontpath[5]);
radio6.setTypeface(tf6);
radio6.setText(fontname[5]);
RadioButton radio7 = (RadioButton) findViewById(R.id.radioButton7);
Typeface tf7 = Typeface.createFromAsset(getAssets(), fontpath[6]);
radio7.setTypeface(tf7);
radio7.setText(fontname[6]);
RadioButton radio8 = (RadioButton) findViewById(R.id.radioButton8);
Typeface tf8 = Typeface.createFromAsset(getAssets(), fontpath[7]);
radio8.setTypeface(tf8);
radio8.setText(fontname[7]);
RadioButton radio9 = (RadioButton) findViewById(R.id.radioButton9);
Typeface tf9 = Typeface.createFromAsset(getAssets(), fontpath[8]);
radio9.setTypeface(tf9);
radio9.setText(fontname[8]);
RadioButton radio10 = (RadioButton) findViewById(R.id.radioButton10);
Typeface tf10 = Typeface.createFromAsset(getAssets(), fontpath[9]);
radio10.setTypeface(tf10);
radio10.setText(fontname[9]);
RadioButton radio11 = (RadioButton) findViewById(R.id.radioButton11);
Typeface tf11 = Typeface.createFromAsset(getAssets(), fontpath[10]);
radio11.setTypeface(tf11);
radio11.setText(fontname[10]);
RadioButton radio12 = (RadioButton) findViewById(R.id.radioButton12);
Typeface tf12 = Typeface.createFromAsset(getAssets(), fontpath[11]);
radio12.setTypeface(tf12);
radio12.setText(fontname[11]);
}
public void onRadioButtonClick(View view) {
bundle1 = getIntent().getExtras();
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch (view.getId()) {
case R.id.radioButton1:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[0]);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
fontpathintent.putExtras(bundle1);
startActivity(fontpathintent);
break;
case R.id.radioButton2:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[1]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton3:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[2]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton4:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[3]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton5:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[4]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton6:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[5]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton7:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[6]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton8:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[7]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton9:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[8]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton10:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[9]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
break;
case R.id.radioButton11:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[10]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton12:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[11]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
}
}
my problem is, upon selection of font, there is no change in activity A, i mean font in activity A remains unchanged.
ariez4u said:
In my app there is an activity say Activity A which has an image view with some text views. code is listed below
Code:
public class EidCardFinal extends Activity {
private ImageView imageView;
private TextView receiver, sender, messagebody;
private Intent intent;
private Bundle bundle;
private static final int FONT_SELECT = 1;
// public String filepath = "MyFileStorage";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_eid_card_final);
intent = getIntent();
String message1 = intent.getStringExtra("RECEIVER");
String message2 = intent.getStringExtra("SENDER");
String message3 = intent.getStringExtra("MESSAGEBODY");
String check_click = intent.getStringExtra("bttnclick");
imageView = (ImageView) findViewById(R.id.imageView1);
receiver = (TextView) findViewById(R.id.textView1);
sender = (TextView) findViewById(R.id.textView2);
messagebody = (TextView) findViewById(R.id.textView3);
receiver.setText(message1);
sender.setText(message2);
messagebody.setText(message3);
// Selected image id
if ("BUTTONCLICK".equals(check_click)) {
String path = intent.getStringExtra("image");
Uri myUri = Uri.parse(path);
imageView.setImageURI(myUri);
} else {
int position = intent.getExtras().getInt("id");
ImageAdapter imageAdapter = new ImageAdapter(this);
// ImageView imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setImageResource(imageAdapter.thumbIds[position]);
case R.id.change_fonts:
Intent fontintent = new Intent();
bundle = getIntent().getExtras();
fontintent.putExtras(bundle);
fontintent.setClass(getApplicationContext(), FontSelection.class);
this.startActivityForResult(fontintent, FONT_SELECT);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == FONT_SELECT) {
Bundle pathadd= data.getExtras();
String fontadd = pathadd.getString("FONTPATH");
//intent = getIntent();
/*String message1 = data.getStringExtra("RECEIVER");
String message2 = data.getStringExtra("SENDER");
String message3 = data.getStringExtra("MESSAGEBODY");
//String check_click = intent.getStringExtra("bttnclick");
imageView = (ImageView) findViewById(R.id.imageView1);
receiver = (TextView) findViewById(R.id.textView1);
sender = (TextView) findViewById(R.id.textView2);
messagebody = (TextView) findViewById(R.id.textView3);
receiver.setText(message1);
sender.setText(message2);
messagebody.setText(message3);*/
//bundle = getIntent().getExtras();
Typeface tyfa = Typeface.createFromAsset(getAssets(), fontadd);
receiver.setTypeface(tyfa);
sender.setTypeface(tyfa);
messagebody.setTypeface(tyfa);
From menu, user is taken to another activity say Activity B from where a custom font can be selected for Activity A. Code is listed below
Code:
public class FontSelection extends Activity {
String[] fontpath = { "fonts/android_7.ttf", "fonts/doridrobot.ttf",
"fonts/droidsansmono.ttf", "fonts/droidserif-bold.ttf",
"fonts/green-avocado.ttf", "fonts/lokicola.ttf",
"fonts/outwrite.ttf", "fonts/painting-the-light.ttf",
"fonts/roboto-black.ttf", "fonts/roboto-boldcondensed.ttf",
"fonts/roboto-medium.ttf", "fonts/roboto-regular.ttf" };
String[] fontname = { "android_7", "doridrobot", "droidsansmono",
"droidserif-bold", "green-avocado", "lokicola", "outwrite",
"painting-the-light", "roboto-black", "roboto-boldcondensed",
"roboto-medium", "roboto-regular" };
private Intent fontpathintent = new Intent();
private Bundle bundle1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_font_selection);
RadioButton radio1 = (RadioButton) findViewById(R.id.radioButton1);
Typeface tf1 = Typeface.createFromAsset(getAssets(), fontpath[0]);
radio1.setTypeface(tf1);
radio1.setText(fontname[0]);
RadioButton radio2 = (RadioButton) findViewById(R.id.radioButton2);
Typeface tf2 = Typeface.createFromAsset(getAssets(), fontpath[1]);
radio2.setTypeface(tf2);
radio2.setText(fontname[1]);
RadioButton radio3 = (RadioButton) findViewById(R.id.radioButton3);
Typeface tf3 = Typeface.createFromAsset(getAssets(), fontpath[2]);
radio3.setTypeface(tf3);
radio3.setText(fontname[2]);
RadioButton radio4 = (RadioButton) findViewById(R.id.radioButton4);
Typeface tf4 = Typeface.createFromAsset(getAssets(), fontpath[3]);
radio4.setTypeface(tf4);
radio4.setText(fontname[3]);
RadioButton radio5 = (RadioButton) findViewById(R.id.radioButton5);
Typeface tf5 = Typeface.createFromAsset(getAssets(), fontpath[4]);
radio5.setTypeface(tf5);
radio5.setText(fontname[4]);
RadioButton radio6 = (RadioButton) findViewById(R.id.radioButton6);
Typeface tf6 = Typeface.createFromAsset(getAssets(), fontpath[5]);
radio6.setTypeface(tf6);
radio6.setText(fontname[5]);
RadioButton radio7 = (RadioButton) findViewById(R.id.radioButton7);
Typeface tf7 = Typeface.createFromAsset(getAssets(), fontpath[6]);
radio7.setTypeface(tf7);
radio7.setText(fontname[6]);
RadioButton radio8 = (RadioButton) findViewById(R.id.radioButton8);
Typeface tf8 = Typeface.createFromAsset(getAssets(), fontpath[7]);
radio8.setTypeface(tf8);
radio8.setText(fontname[7]);
RadioButton radio9 = (RadioButton) findViewById(R.id.radioButton9);
Typeface tf9 = Typeface.createFromAsset(getAssets(), fontpath[8]);
radio9.setTypeface(tf9);
radio9.setText(fontname[8]);
RadioButton radio10 = (RadioButton) findViewById(R.id.radioButton10);
Typeface tf10 = Typeface.createFromAsset(getAssets(), fontpath[9]);
radio10.setTypeface(tf10);
radio10.setText(fontname[9]);
RadioButton radio11 = (RadioButton) findViewById(R.id.radioButton11);
Typeface tf11 = Typeface.createFromAsset(getAssets(), fontpath[10]);
radio11.setTypeface(tf11);
radio11.setText(fontname[10]);
RadioButton radio12 = (RadioButton) findViewById(R.id.radioButton12);
Typeface tf12 = Typeface.createFromAsset(getAssets(), fontpath[11]);
radio12.setTypeface(tf12);
radio12.setText(fontname[11]);
}
public void onRadioButtonClick(View view) {
bundle1 = getIntent().getExtras();
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch (view.getId()) {
case R.id.radioButton1:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[0]);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
fontpathintent.putExtras(bundle1);
startActivity(fontpathintent);
break;
case R.id.radioButton2:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[1]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton3:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[2]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton4:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[3]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton5:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[4]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton6:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[5]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton7:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[6]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton8:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[7]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton9:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[8]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton10:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[9]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
break;
case R.id.radioButton11:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[10]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
case R.id.radioButton12:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[11]);
fontpathintent.putExtras(bundle1);
fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
startActivity(fontpathintent);
break;
}
}
my problem is, upon selection of font, there is no change in activity A, i mean font in activity A remains unchanged.
Click to expand...
Click to collapse
Your problem is that you restart your first acitivity in your font selection activity. Instead you'd want to call setResult() in there and then finish that activity. Only that way onActivityResult() is called in your first activity!
SimplicityApks said:
Your problem is that you restart your first acitivity in your font selection activity. Instead you'd want to call setResult() in there and then finish that activity. Only that way onActivityResult() is called in your first activity!
Click to expand...
Click to collapse
Well, thanks for the reply. I have made changes as per your instructions but unfortunately result is same. Changes in the code
Code:
case R.id.radioButton1:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[0]);
// fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
// fontpathintent.putExtras(bundle1);
// startActivity(fontpathintent);
setResult(1, fontpathintent);
finish();
break;
case R.id.radioButton2:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[1]);
// fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
// fontpathintent.putExtras(bundle1);
// startActivity(fontpathintent);
setResult(1, fontpathintent);
finish();
break;
Code:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == 1) {
// Bundle pathadd= data.getExtras();
String customfont = data.getStringExtra("FONTPATH");
// String fontadd = pathadd.getString("FONTPATH");
// intent = getIntent();
/*
* String message1 = data.getStringExtra("RECEIVER"); String
* message2 = data.getStringExtra("SENDER"); String message3 =
* data.getStringExtra("MESSAGEBODY"); //String check_click =
* intent.getStringExtra("bttnclick"); imageView = (ImageView)
* findViewById(R.id.imageView1); receiver = (TextView)
* findViewById(R.id.textView1); sender = (TextView)
* findViewById(R.id.textView2); messagebody = (TextView)
* findViewById(R.id.textView3); receiver.setText(message1);
* sender.setText(message2); messagebody.setText(message3);
*/
// bundle = getIntent().getExtras();
Typeface tyfa = Typeface.createFromAsset(getAssets(),
customfont);
receiver.setTypeface(tyfa);
sender.setTypeface(tyfa);
messagebody.setTypeface(tyfa);
}
}
}
ariez4u said:
Well, thanks for the reply. I have made changes as per your instructions but unfortunately result is same. Changes in the code
Code:
case R.id.radioButton1:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[0]);
// fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
// fontpathintent.putExtras(bundle1);
// startActivity(fontpathintent);
setResult(1, fontpathintent);
finish();
break;
case R.id.radioButton2:
if (checked)
fontpathintent.putExtra("FONTPATH", fontpath[1]);
// fontpathintent.setClass(getApplicationContext(),EidCardFinal.class);
// fontpathintent.putExtras(bundle1);
// startActivity(fontpathintent);
setResult(1, fontpathintent);
finish();
break;
Code:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == 1) {
// Bundle pathadd= data.getExtras();
String customfont = data.getStringExtra("FONTPATH");
// String fontadd = pathadd.getString("FONTPATH");
// intent = getIntent();
/*
* String message1 = data.getStringExtra("RECEIVER"); String
* message2 = data.getStringExtra("SENDER"); String message3 =
* data.getStringExtra("MESSAGEBODY"); //String check_click =
* intent.getStringExtra("bttnclick"); imageView = (ImageView)
* findViewById(R.id.imageView1); receiver = (TextView)
* findViewById(R.id.textView1); sender = (TextView)
* findViewById(R.id.textView2); messagebody = (TextView)
* findViewById(R.id.textView3); receiver.setText(message1);
* sender.setText(message2); messagebody.setText(message3);
*/
// bundle = getIntent().getExtras();
Typeface tyfa = Typeface.createFromAsset(getAssets(),
customfont);
receiver.setTypeface(tyfa);
sender.setTypeface(tyfa);
messagebody.setTypeface(tyfa);
}
}
}
Click to expand...
Click to collapse
Mmmh strange... I assume your onActivityResult() gets called? I'm not familiar with the typefaces but maybe you need to invalidate() the view to see the change. Well you might as well check if tyfa is a valid typeface in that method, because to me the code looks functional.
SimplicityApks said:
Your problem is that you restart your first acitivity in your font selection activity. Instead you'd want to call setResult() in there and then finish that activity. Only that way onActivityResult() is called in your first activity!
Click to expand...
Click to collapse
i have acted upon your instructions but unable to find the solution, i think (as you have suggested too) that onActivityResult() is not called, beccause i have tried below but no result as well.
Code:
tyfa = Typeface.createFromAsset(getAssets(),
[B][COLOR="Red"]"fonts/outwrite.ttf"[/COLOR][/B]);
receiver.setTypeface(tyfa);
sender.setTypeface(tyfa);
messagebody.setTypeface(tyfa);
SimplicityApks said:
Mmmh strange... I assume your onActivityResult() gets called? I'm not familiar with the typefaces but maybe you need to invalidate() the view to see the change. Well you might as well check if tyfa is a valid typeface in that method, because to me the code looks functional.
Click to expand...
Click to collapse
i have acted upon your instructions but unable to find the solution, i think (as you have suggested too) that onActivityResult() is not called, beccause i have tried below but no result as well.
Code:
tyfa = Typeface.createFromAsset(getAssets(),
[B][COLOR="Red"]"fonts/outwrite.ttf"[/COLOR][/B]);
receiver.setTypeface(tyfa);
sender.setTypeface(tyfa);
messagebody.setTypeface(tyfa);
ariez4u said:
i have acted upon your instructions but unable to find the solution, i think (as you have suggested too) that onActivityResult() is not called, beccause i have tried below but no result as well.
Code:
tyfa = Typeface.createFromAsset(getAssets(),
[B][COLOR="Red"]"fonts/outwrite.ttf"[/COLOR][/B]);
receiver.setTypeface(tyfa);
sender.setTypeface(tyfa);
messagebody.setTypeface(tyfa);
Click to expand...
Click to collapse
I think I found what the problem is here, you call setResult() with your requestCode, but instead it should be called with a resultCode as first parameter, so it should be setResult(RESULT_OK, fontpathintent);! Let me know if that works, see here for a sample.
SimplicityApks said:
I think I found what the problem is here, you call setResult() with your requestCode, but instead it should be called with a resultCode as first parameter, so it should be setResult(RESULT_OK, fontpathintent);! Let me know if that works, see here for a sample.
Click to expand...
Click to collapse
really obliged. thank you very much. my problem is solved