ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 3 از 7 نخست 1234567 آخرین
نمایش نتایج: از 21 به 30 از 65
  1. #21
    2012/01/04
    101
    2

    پاسخ : آموزش برنامه نويسي اندرويد

    5. Life Cycle اکتيويتي ها

    براي ادامه کار خيلي خوب و مهمه که بدونيد برنامتون در چه در چه وضعيتي قرار داره. روند اجرا تا بسته شدن يک اکتيويتي رو توي اين نمودار ميتونيد ببينيد :


    http://up.ashiyane.org/images/7ovpzi3cn72lkimciz1.png

    وقتي که يک اکتيويتي اجرا ميشه اولين چيزي که اجرا ميشه تابع onCreate هست. توي اين قسمت هنوز کاربر رابط کاربري رو نميبينه. شما هم مثلا نميتونيد بفهميد الان يک view (همون آيتم ها مثل کليد و ... ) که قرار بوده تمام صفحه اکتيويتي رو بگيره الان چند پيکسل در چند پيکلسله

    بعد از تابع onStart ديگه کاربر رابط کاربري رو داره. بعد تابع onStart و onResume اجرا ميشه. تا اينجا تقريبا شما مطمعنيد که همه توابعي که تو نمودار اومده اجرا شده. ولي از اينجا به بعد ممکن اتفاقات متفاوتي بي افته. مثلا کاربر با کليد بازگشت گوشي از برنامه خارج بشه. کليد home رو بزنه يا يک برنامه ديگه اجرا کنه و مثلا حافظه رم کم بياد. زماني که قراره اکتيويتي فعلي متوقف شه تابع onPause اجرا ميشه ولي از اون به بعد ممکنه برنامه کامل بسته شه يا اين که تابع onStop اجرا شده. اگه تابع onStop اجرا شد ممکنه دوباره برنامه همينجا کارش تموم بشه يا اينکه onDestroy اجرا بشه. بعد از اون ديگه برنامه بسته ميشه. در صورت عادي مثلا وقتي شما يک ديالگو جديد باز ميکنيد تابع onPause اجرا ميشه ولي زماني که ديگه کاربر اکتيويتي رو نميوتونه ببينه onStop اجر ميشه. اگه کاربر از onPause به برنامه برگرده تابع onResume اجرا ميشه و دوباره ميتونه برنامه رو ببينه. ولي اگه از onStop برگرده به برنامه اول onRestart بعد onStart و بعد onResume اجرا ميشه.


    توصيه ميکنم اين جدول رو مطالعه کنيد


    http://up.ashiyane.org/images/5jp5xzdhfs32xu9g1qpy.png

    خوب همينقدر فکر کنم براي ادامه کافي باشه. البته خودم احساس ميکنم يکم بد توضيح دادم. براي همين اگه خواستيد بيشتر مطالعه کنيد تو اين ضمينه صفحه مربوطه رو به که به pdf تبديل شده از لينک هاي زير ميتونيد دانلود کنيد :

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
  2. #22
    2012/01/04
    101
    2

    پاسخ : آموزش برنامه نويسي اندرويد

    ايجاد شبيه ساز پرسرعت

    اين قسمت در ادامه قسمت هاي قبلي نيست. براي همين شماره هم نداره. در واقع يه سري نکات مفيد ديگه رو در قسمت ديگه اي جدا از مطالب دنباله دار قرار ميديم تا بهتر بشه بهشون دسترسي داشت.

    شايد يکي از مشکلاتي که احتمالا تا الان باهاش مواجه شديد کند بودن شبيه ساز هست که خيلي وقت ها فوق العاده اذيت ميکنه. و براي تست يک برنامه ساده شما بايد وقت زيادي رو صرف انتظار براي اجرا شدن يک برنامه يا رويداد در برنامه بکنيد.

    اما اگه از سيستمي استفاده ميکنيد که پردازنده intel داره ميتونيد کاري کنيد که سرعت شبيه ساز چندين برابر بشه و تقريبا به اندازه خود گوشي برسه ( البته بازم اون نميشه ولي خيلي خيلي سريع تر از ايني که هست ميشه)

    براي اين موضوع intel نرم افزاري رو متشر کرده که ميتونيد از لينک زير دانلودش کنيد ( البته در انتهاي اين پست يک بسته کامل هست از چيزايي که نياز داريد به sdk اضافه کنيد. اين هم توش هست )

    https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager

    غير از پکيج مربوط به نسخه اندرويد به يک System image براي intel روي همون نسخه هم نياز داريد. يعني اگه در پوشه platforms داخل sdk , اندرويد 18 داشتيد , بايد توي system images هم اندرويد 18 داشته باشيد.

    خوب بعد از اينکه همه چيز دانلود شد ( لينک در آخر همين پست هست )
    در پوشه SDK اول به پوشه extras -> intel -> Hardware_Accelerated_Execution_Manager بريد و فايل intelhaxm.exe رو اجرا کنيد
    مراحل رو جلو بريد تا به اين صفحه برسيد :



    http://up.ashiyane.org/images/9l8wdtkrvhq7275l8vz.png

    اينجا بايد مقدار رمي رو که ميخايد بشه به شبيه ساز اختصاص داد رو مشخص کنيد. خودش در Default Value يک مقدار با توجه به سيستم در نظر ميگيره ولي به صورت دستي هم ميتونيد در قسمت Set Value مقدار مورد نظر رو انتخاب کنيد. من 1.5 گيگ اختصاص ميدم.

    حالا AVD Manager رو اجرا کنيد ( البته پکيج هارو همونطور که در ادامه گفته ميشه کپي کرده باشيد ) بعد به صورت قبل يک ماشين مجازي رو بسازيد. ولي اينبار با انتخاب نسخه اي که system image اونو دانلود کرديد ( براي اين بسته که پايين هست android 18 ) امکان انتخاب پردازنده اينتل رو در قسمت cpu target ايجاد ميکنيد. بعد هم يک رم خيلي خوب بهش بديد مثلا 1 گيگ. و در آخر هم به جاي Snap Shot از Host GPU استفاده کنيد. يک نمونه از شبيه ساز که با intel کار کنه :



    http://up.ashiyane.org/images/n084uo6ub1jsjzqbdqzg.png

    حالا شبيه ساز رو اجرا کنيد و از سرعت زيادش استفاده مفيد کنيد :smile:

    اين هم بسته اي که گفته بودم. کافيه محتوياتش رو توي پوشه SDK کپي کنيد همه چيز سر جاي خودش ميره

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
  3. #23
    2012/01/04
    101
    2

    پاسخ : آموزش برنامه نويسي اندرويد

    6. ذخيره اطلاعات - استفاده از Shared Preference

    براي ذخيره سازي اطلاعات در اندرويد به صورت کلي 3 راه رو ميشه نام برد.

    1. استفاده از Shared Preference
    2. استفاده از ديتابيس
    3. استفاده از فايل

    توي اين قسمت قصد داريم با مورد اول کار کنيم . از Shared Preference ميتونيد براي ذخيره مقاديري از نوع int , long , float , boolean , string استفاده کنيد.

    براي مثال يک فرض کنيد ميخايم يک برنامه بنويسيم که يک نوشته رو ذخيره کنه و حتي اگه کاربر خارج شد نوشته از بين نره و وقتي نرم افزار دوباره اجرا ميشه همون نوشته رو به کاربر نشون بده.

    خوب يک پروژه جديد ميسازيم. توي xml اکتيويتي اصلي به قسمت ويرايشگر xml ميريم . از اين خط يه کپي ميگيريم و کل محتويات فايل xml رو پاک ميکنيم تا يک layout از اول بنويسيم :

    کد:
    xmlns:android="http://schemas.android.com/apk/res/android"
    اينبار ميخايم به جاي RelativeLayout از LinearLayout استفاده کنيم. LinearLayout کارش اينه که همه View هايي که داخلش قرار ميگيره رو به صورت عمودي يا افقي قرار ميده. براي مثال ما الآن ميخايم يک EditText و يک Button و يک TextView رو زير هم قرار بديم. ميتونيم براي اينکار از LinearLayout استفاده کنيم.

    پس يک تگ LinearLayout باز و بسته ميکنيم (کلا از control + space توي xml زياد کمک ميشه گرفت)


    کد:
    <LinearLayout>
      
    </LinearLayout>
    حالا يه سري خصوصيت بايد بهش اضافه کنيم. اوليش همون خصوصيت xmlns:android بود که کپي کرديم اينجا قرارش ميديم :

    کد:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
      
    </LinearLayout>
    بعد هم بايد عمودي افقي بودنش رو مشخص کنيم. از خصوصيت androidrientation ( از اين به بعد android: رو نمينويسم براي خصوصيت view ها ) براي اينکار استفاده ميکنيم و اون رو برابر vertical قرار ميديم. بعد هم به خصوصيت width و height مقدار match_parent ميديم تا تمام صفحه رو بگيره :

    کد:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical">
      
    </LinearLayout>
    حالا يک EditText اضافه ميکنيم.
    يک خصوصيت آي دي رو ميخايم بهش اضافه کنيم. id چون قراره جديد باشه بايد از علامت + استفاده کنيم تا يک id جديد در فايل R.java بسازه :


    کد:
    android:id="@+id/editText"
    يه نکته هم اينکه وقتي قراره با id هاي موجود در R.java کار کنيم اولش يک @ اضافه ميکنيم. حتي وقتي يک عکس وارد پروژه شد يک اي دي به اون نسبت ميده در فايل R.java ولي در کلاس drawable قرار ميده. اما آي دي view ها در همون کلاس id در فايل R.java قرار ميگرند. ( متوجه نشديد طوري نيست :smile: )

    بعد هم طول و عرضش رو مشخص ميکنيم. طولش رو ميخايم کل سطر رو بگيره پس match_parent قرار ميديم ولي براي ارتفاعش از wrap_content استفاده ميکنيم تا فقط به اندازه همون خط که توش نوشته ميشه فضا بگيره. يعني به اندازه محتواي داخلش بشه


    کد:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical">
      
      	<EditText
      	   android:id="@+id/editText"
      	   android:layout_width="match_parent"
      	   android:layout_height="wrap_content"/>
      	
    </LinearLayout>
    حالا يک کليد اضافه ميکنيم. آي دي button رو بهش ميديم و طول و عرضش رو هم مثل editText قرا ميديم. براي متن روي کليد هم از text استفاده ميکنيم.

    کد:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical">
      
      	<EditText
      	   android:id="@+id/editText"
      	   android:layout_width="match_parent"
      	   android:layout_height="wrap_content"/>
      	
      	<Button 
      	  android:id="@+id/button"
      	  android:layout_width="match_parent"
      	  android:layout_height="wrap_content"
      	  android:text="ذخيره"/>
      	
    </LinearLayout>
    و در نهايت يک TextView :

    کد:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical">
      
      	<EditText
      	   android:id="@+id/editText"
      	   android:layout_width="match_parent"
      	   android:layout_height="wrap_content"/>
      	
      	<Button 
      	  android:id="@+id/button"
      	  android:layout_width="match_parent"
      	  android:layout_height="wrap_content"
      	  android:text="ذخيره"/>
      	
      	<TextView
      	  android:id="@+id/textView"
      	  android:layout_width="match_parent"
      	  android:layout_height="wrap_content"
      	  android:text="متني موجود نيست"/>
      	
    </LinearLayout>
    حالا به بخش گرافيکي فايل xml ميريم تا نتيجه کار رو ببينيم :


    http://up.ashiyane.org/images/q847f98nl2lkxhbznk3.png

    همونطور که ميبينيد صفحه از روي کد xml که نوشتيم ساخته شده و view ها زير هم قرار گرفتند. اين کار ها با خودش ويرايشگر گرافيکي هم قابل انجام هست.
    حالا به سراغ کد نويسي ميريم.

    اول هر سه view رو پيدا ميکنيم.

    بعد يک OnClickListener براي کليد قرار ميديم تا با کليد شدن اطالعات رو ذخيره کنيم.
    برتي کار با اطلاعات ذحيره شده از SharedPreferences و SharedPreferences.Editor استفاده ميکنيم.
    ابتدا بايد SharedPreferences مربوطه رو باز کنيم :


    کد:
    sharedPreferences = getSharedPreferences("AppPref", 0);
    همونطور که ديديد اينکار با تابع getSharedPreferences انجام ميگيره. اين تابع يک ورودي ميگيره که نام SharedPreference هست که اگه باشه اونو بر ميگردونه اگه نباشه ميسازه. به صورت اختياري اونو يه چيز قرار بديد. فقط بايد در جاهاي ديگه ازش استفاده کنيد. من AppPref قرار دادم. ورودي دوم رو هم کلا صفر بزاريد.

    براي خوندن SharedPreference همين کار کافيه ولي براي نوشتن بايد از SharedPreferences.Editor استفاده کنيم. براي گرفتم SharedPreferences.Editor به اين شکل عمل ميکنيم


    کد:
    SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit();
    حالا با استفاده از putString و ... مقادير مورد نياز رو در SharedPreference قرار ميديم. به عنوان مثال الان ميخايم متن editText رو ذخيره کنيم :

    کد:
    sharedPreferencesEditor.putString("userText", editText.getText().toString());
    همونطور که ميبينيد تابع putString دو تا ورودي گرفته. اولي نام مقداري هست که ميخايم ذخيره کنيم. بعدا با اين نام اين مقدار رو بازيابي ميکنيم. دومي هم مقداري هست که ميخايم ذخيره کنيم که الان رشته اي که کاربر نوشته رو ميخايم ذخيره کنيم.

    و در نهايت با صدا زدن تابع commit عمليات ذخيره رو کامل ميکنيم. کد تا اينجا :


    کد:
    package ir.tutorial.app4_savedata_sharedpreference;
    
    import ir.tutorial.app4_savedata_sharedpreference.R;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.SharedPreferences;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
    	EditText editText;
    	Button button;
    	TextView textView;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	
    		editText = (EditText)findViewById(R.id.editText);
    		button = (Button)findViewById(R.id.button);
    		textView = (TextView)findViewById(R.id.textView);
    		
    		button.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View arg0) {
    				SharedPreferences sharedPreferences;
    				sharedPreferences = getSharedPreferences("AppPref", 0);
    				SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit();
    				sharedPreferencesEditor.putString("userText", editText.getText().toString());
    				sharedPreferencesEditor.commit();
    			}
    		});
    		
    	}
    }
    حالا يک تابع مينويسيم که کار با صدا زدنش متن textView از داخل SharedPreference بازيابي بشه نمايش داده بشه.
    اين تابع رو هم بعد از ذخيره کردن اطلاعات صدا ميزنيم هم در ابتداي برنامه تا متن textView به روز بشه. در اين تابع مثل دفه قبل SharedPreference رو ميگيريم. بعد با استفاده از getString متن رو پيدا ميکنيم :


    کد:
    	void UpdateTextView()
    	{
    		SharedPreferences sharedPreferences = getSharedPreferences("AppPref", 0);
    		String text = null;
    		text = sharedPreferences.getString("userText", null);
    		if(text != null)
    		{
    			textView.setText(text);
    		}
    	}
    تابع getString دو تا ورودي ميگيره. اولي نام مقداري هست که ذخيره کرديم و دومي مقدار ديفالت در صورت نبودن اطلاعاتي با اون نام (البته من احساس ميکنم قسمت دوم زياد درست کار نميکنه :read: يعني اگه چيزي نباشه باز هم null بر ميگردونه حتي اگه شما يک رشته رو به عنوان ورودي دوم داده باشيد. براي همين من اون رو null قرار ميدم)

    بعد چک ميکنيم اگه چيزي بود اون رو در editText نشون بده.
    حالا برنامه رو کامل ميکنيم :


    کد:
    package ir.tutorial.app4_savedata_sharedpreference;
    
    import ir.tutorial.app4_savedata_sharedpreference.R;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.SharedPreferences;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
    	EditText editText;
    	Button button;
    	TextView textView;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	
    		editText = (EditText)findViewById(R.id.editText);
    		button = (Button)findViewById(R.id.button);
    		textView = (TextView)findViewById(R.id.textView);
    		
    		UpdateTextView();
    		
    		button.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View arg0) {
    				SharedPreferences sharedPreferences;
    				sharedPreferences = getSharedPreferences("AppPref", 0);
    				SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit();
    				sharedPreferencesEditor.putString("userText", editText.getText().toString());
    				sharedPreferencesEditor.commit();
    				UpdateTextView();
    			}
    		});
    	}
    	
    	void UpdateTextView()
    	{
    		SharedPreferences sharedPreferences = getSharedPreferences("AppPref", 0);
    		String text = null;
    		text = sharedPreferences.getString("userText", null);
    		if(text != null)
    		{
    			textView.setText(text);
    		}
    	}
    }
    حالا ميريم تا برنامه رو تست کنيم :


    http://up.ashiyane.org/images/n1d6nrwynu27cews2e9.png


    http://up.ashiyane.org/images/x1s1qf4qtufevhoesae.png

    نکته آخر هم اينکه اين اطلاعات با پاک شدن برنامه يا چاک کردن داده ها از قسمت مديريت برنامه هاي کاربردي انجام ميشه. ولي اگه شما يک نسخه جديد تر روي همين نسخه نصب کنيد اندرويد اين اجازه رو به کاربر ميده که اطلاعات به نسخه بعد هم انتقال پيدا کنه.
    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
  4. #24
    2012/01/04
    101
    2

    پاسخ : آموزش برنامه نويسي اندرويد

    7. استفاده از ListView

    در اين بخش به سراغ يکي از View هايل خيلي مهم توي اندرويد ميريم. البته فقط يه استفاده ساده ازش رو ميبينيم به چه شکل هست. اين View در خيلي جاها کاربرد داره. کارش اينه که وقتي ما قرار باشه سطر هايي پشت سر هم و مثل هم داشته باشيم از اين ويو استفاده ميکنيم. مثلا دفترچه تلفن رو نگاه کنيد. تمام سطر ها فقط در محتوا متفاوت هستند ولي اينکه نام کجا باشه , شماره تلفن کجا باشه و ... با هم يکسان هستند. در اين موارد از ListView استفاده کنيم.

    البته تو اين قسمت فقط نحوه استفاده ساده از اون رو ميبينيم و در بخش هاي اون رو به صورت مورد نياز در مياريم. الان فقط قرار يک ليست از نوشته رو نمايش بديم.

    کار ليست ويو به صورت کلي اين هست که بايد يک Adapter بهش بديم تا از روي اون ليست رو بسازيم.

    يه پروژه جديد ميسازيم بعد به فايل XML ميريم و يک ListView از Palette -> Composite به داخل صفحه ميکشيم. به صورت پيشفرض الان يه سري آيتم رو نمايش ميده (البته اگه الان برنامه رو اجرا کنيد چيزي نمايش نميده)
    آي ديش رو هم برابر listView قرار ميديم :



    http://up.ashiyane.org/images/o30xpct0dr1qawkg9s0o.png

    حالا به فايل جاوا ميريم. اول يه آرايه از چيزايي که ميخايم نمايش بديم رو ميسازيم. مثلا يک آرايه از نام تعدادي کتاب :

    کد:
    String[] books = {"پا به پاي باران", " عباس دست طلا", "من زنده ام",
    						 "دا", "ارميا", "پايي که جا ماند", "نويد امن و امان",
    						 "آزادي معنوي"};
    بعد يک ArrayAdapter که بايد به listView بديم. ArrayAdapter در يکي حالات سه تا ورودي براي سازنده ميگيره. اولي Context هست که همون MainActivity.this رو بهش ميديم. دومي شيوه چيدن محتوا هست که بايد id يک فايل xml رو بديم. از فايل موجود در خود اندرويد استفاده ميکنيم. آي دي هايي که توي خود اندرويد هست به جاي R.java در android.R.java قرار داره. ما به ورودي دوم android.R.layout.simple_list_item_1 رو ميديم. ورودي سوم هم ليست چيزي هست که قراره نشون بديم. بعد هم بايد به ليست ويو که در اکتيويتي قرار داديم اين Adapter رو با استفاده از تابع setAdapter نسبت بديم. کل کد به اين شکل ميشه :

    کد:
    package ir.tutorial.app5_listview;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		String[] books = {"پا به پاي باران", " عباس دست طلا", "من زنده ام",
    						 "دا", "ارميا", "پايي که جا ماند", "نويد امن و امان",
    						 "آزادي معنوي"};
    		ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>
    		(MainActivity.this, android.R.layout.simple_list_item_1,books);
    		ListView listView = (ListView)findViewById(R.id.listView);
    		listView.setAdapter(arrayAdapter);
    		
    	}
    }
    حالا برنامه رو تست ميکنيم تا نتيجه رو ببينيم :


    http://up.ashiyane.org/images/zjl0fnz8p84agkz2pzu.png

    خوب براي شروع با ليست ها براي اين بخش کافيه.ولي در قسمت هاي بعدي ان شاءالله بيشتر با ليست ها کار ميکنيم.

    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
  5. #25
    2010/10/04
    تهران
    1,462
    388

    پاسخ : آموزش برنامه نويسي اندرويد

    با تشكر از آقاي محمد علي.

    اون مشكل اجرا نشدن SDK MANAGER حل شد. چون ديدم مشكل شايعي هست و تو سايت استك هم خيلي ها همين رو مطرح كرده بودن گفتم بذارم تا بقيه هم بدونن. مشكل من از مسير نصب بود كه ظاهرا طول رشته ش زياد بود. وقتي پوشه رو به روت نزديكتر كردم، مشكل برطرف شد. البته طبق پاسخهايي كه تو استك داده بودن، يه كارهاي ديگه اي هم كردم، ولي به نظرم با اينكار قضيه حل شد.
    کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.
  6. #26
    2012/01/04
    101
    2

    پاسخ : آموزش برنامه نويسي اندرويد

    نقل قول نوشته اصلی توسط نو رسيده
    با تشكر از آقاي محمد علي.

    اون مشكل اجرا نشدن SDK MANAGER حل شد. چون ديدم مشكل شايعي هست و تو سايت استك هم خيلي ها همين رو مطرح كرده بودن گفتم بذارم تا بقيه هم بدونن. مشكل من از مسير نصب بود كه ظاهرا طول رشته ش زياد بود. وقتي پوشه رو به روت نزديكتر كردم، مشكل برطرف شد. البته طبق پاسخهايي كه تو استك داده بودن، يه كارهاي ديگه اي هم كردم، ولي به نظرم با اينكار قضيه حل شد.
    خواهش ميکنم.
    توي http://stackoverflow.com/ خيلي از سوالاي مربوط به برنامه نويسي که پيش مياد قبلا پرسيده شده. خيلي کمک ميکنه براي سرعت کار.
    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
  7. #27
    2012/01/04
    101
    2

    پاسخ : آموزش برنامه نويسي اندرويد

    8. اختصاصي سازي ListView

    در بخش قبلي يه ليست خيلي ساده با ListView ساختيم. اما کاربرد ListView بيشتر از اينچيزاست.
    براي نمونه ما ميخايم يک ليست بسازيم که تصوير و نام و قيمت يک سري از محصولات سايت رو نشون بده. براي شروع چند تا تصوير از محولات فروشگاه سايت ذخيره کردم. اسماي عکسارو هم تغير دادم تا با مفهوم شه. حالا تصاوير رو به داخل پوشه drawable-hdpi ميکشيم و رها ميکنيم



    http://up.ashiyane.org/images/pxciq5u9athj7r9voblp.png

    حالا به سراغ فايل main-activity.xml ميريم و مثل قبل يک ListView درونش قرار ميديم. آي ديشو هم مثلا listView قرار ميديم.
    بعد يک فايل xml ديگه ميسازيم. قراره از روي اين فايل سطر هاي ليست ساخته بشه. يعني يک ليست با سطر هايي با چينش اين فايل داشته باشيم. مثلا اسمش رو list_item_layout.xml قرار ميديم. و از RelativeLayout استفاده ميکنيم. حالا در اين فايل از قسمت Palette -> Image & Media يک ImageView به داخل صفحه ميکشيم. اين ويو براي نمايش تصوير به کار ميره. وقتي اونو به درون صفحه بکشيد يک پنجره باز ميشه که از شما id تصويري رو ميخاد تا توش نمايش بده. يک تصوير رو فعلا انتخاب کنيد. مهم نيست چون تصوير اصلي رو با کد مشخص ميکنيم. اون رو در بالا و سمت راست صفحه قرار ميديم.
    به سمت راست ويرايشگر و قسمت Properties ميريم.
    در حالي که ImageView درون صفحه در حال انتخاب قرار داره از اين قسمت به Layout Parameters -> Width ميريم. ميخايم طول و عرض صفحه رو به صورت ثابت تعريف کنيم. فکر کنم 70dp مناسب باشه. پس Width و Height رو برابر 70dp قرار ميديم. ميخايم از سمت چپش هم يکم فاصله ايجاد کنيم تا نوشته هايي که قراره اضافه بشه بهش نچسبه و ظاهر بهتري پيدا کنه. بنابر اين به قسمت Layout Parameters -> Margins ميريم و Left رو برابر 2dp قرار ميديم.
    بعد هم ميخايم مشخص کنيم که تصوير رو تغير اندازه بده تا به اندازه خود ImageView بشه. بنابر اين يکم پايين تر از Layout Parameters به ImageView -> Scale Type ميريم و اون رو روي fitXY قرار ميديم.

    بعد به بالاي قسمت Properties يعني قسمت Outline ميريم و RelativeLayout رو انتخاب ميکنيم.ميخوايم يک فاصله درون اين RelativeLayout ايجاد کنيم تا آيتم ها به ديواره ها نچسبند و يکمي فاصله داشته باشند. بنابر اين همينطور که RelativeLayout در حال انتخاب هست به Properties -> Layout Parameters -> Margins ميريم و Margin رو برابر 4dp قرار ميديم تا از هر طرف 4dp فاصله ايجاد بشه.

    طول و عرض اين Relative Layout رو هم بايد تغير بديم. چون قراره فقط يکي از آيتم هاي ليست باشه. پس به Properties -> Layout Parameters ميريم و Width رو برابر match_parent قرار ميديم تا کل عرض صفحه گرفته بشه ولي ارتفاع اون رو برابر wrap_content قرار ميديم تا فقط به اندازه محتويات درونش باشه.

    حالا يک Medium Text به بالا و سمت چپ تصوير و يک Small Text زير Medium Text قرار ميديم. در اولي نام محصول و در دومي قيمتش رو مينويسيم.
    براي اين دوتا TextView از قسمت Properties -> TextView -> Gravity رو روي right قرار ميديم تا متن راست به چپ نوشته بشه.
    آيدي ImageView رو listItemImageView و آيدي TextView مربوط به نام مخصول رو listItemNameTextView و ديگري رو listItemPriceTextView قرار ميديم.



    http://up.ashiyane.org/images/kmyi4q7lhc9jlst6izb.png

    براي اينکه ليست رو اختصاصي کنيم بايد يک کلاس براي Adapter اون بنويسيم. پس يک کلاس جديد ميسازيم به نام SpecialListViewAdapter که از android.widget.BaseAdapter ارث بري کنه. وقتي کلاس رو مسازيد به همچين کدي روبرو ميشيد :

    کد:
    package ir.tutorial.app6_speciallistview;
    
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    
    public class SpecialListViewAdapter extends BaseAdapter {
    	
    	@Override
    	public int getCount() {
    		
    		return 0;
    	}
    
    	@Override
    	public Object getItem(int arg0) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public long getItemId(int arg0) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public View getView(int arg0, View arg1, ViewGroup arg2) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    }
    چون در پنجره اي که خود اکيليپس براي ساخت کلاس باز ميکنه مشخص کرديم از چه کلاسي ارث بري کنه توابعي که بايد حتما بايد تعريف بشه رو خودش ساخته.

    getCount : مشخص ميکنه که اين ليست چند تا آيتم داره
    getItem : شماره آيدي به عنوان ورودي دريافت ميشه و بايد آتم مورد نظر بر گردونده شه ( ميشه مثلا نام محصول يا قيمتش يا ... رو برگردونيد )
    getView : توي اين تابع بايد سطر ساخته بشه.

    اون يکي رو هم فعلا کاري نداريم.

    آيدي تصاوير و نام و قيمت رو در يک آرايه توي کلاس قرار ميديم :


    کد:
    	String[] names = {"Beaglebone Black BB-Black", 
    					 "ماژول بلوتوث HC-05",
    					 "برد آموزشي حرفه اي ",
    					 "ماژول LCD 3.2 تمام رنگي",
    					 "ماژول شبکه ENC28J60",
    					 "ماژول ريدر RFID 13.56MHZ",
    					 "ماژول USB HOST"};
    	int[] prices = {3300000,200000,2350000,320000,180000,430000,380000};
    	int[] imageIDs = {R.drawable.beaglebone,
    					 R.drawable.bluetooth,
    					 R.drawable.board,
    					 R.drawable.lcd,
    					 R.drawable.net,
    					 R.drawable.rfid,
    					 R.drawable.usb_host};
    توي getCount اندازه يکي از آرايه هارو بر ميگردونيم.

    کد:
    @Override
    	public int getCount() {
    		return imageIDs.length;
    	}
    حالا به سراغ getView ميريم.

    اين تابع چندين بار صدا زده ميشه و هربار ما بايد سطر مربوطه رو درست کنيم. اول اسم ورودي هارو تغير ميديم تا راحت تر باشون کار کنيم. :


    کد:
    @Override
    	public View getView(int position, View view, ViewGroup arg2) {
    		return null;
    	}
    اين position از صفر تا مقداري که GetCount برگردونده منهاي ميتونه متغير باشه.

    view هم همون سطر هست که بايد برگرده.
    قبل از ادامه کار يک کلاس به نام ViewHolder توي خود همين کلاس (از قابليت هاي جاوا اينه که ميشه تو يک کلاس يا حتا يک تابع يک کلاس تعريف کرد) تعريف ميکنيم. که توش سه تا شي مثل list_item_layout.xml داشته باشه. اين کار براي بهبود سرعت انجام ميشه و ميشه به اين شکل هم انجام نشه :


    کد:
    	class ViewHolder
    	{
    		ImageView imageView;
    		TextView nameTextView;
    		TextView priceTextView;
    	}
    بعد هم يک شي عمومي از نوع Context به کلاس SpecialListAdapter اضافه ميکنيم و در سازنده اون رو به عنوان ورودي ميگيريم :

    کد:
    	Context context;
    	
    	public SpecialListViewAdapter(Context context) {
    		this.context = context;
    	}
    حالا بر ميگرديم به همون تابع getView. اينبار اول کد رو مينويسم بعد توضيح ميدم :

    کد:
    	@Override
    	public View getView(int position, View view, ViewGroup arg2) {
    		View convertedView = view;
    		ViewHolder viewHolder;
    		
    		if(convertedView == null)
    		{
    			LayoutInflater layoutInflater;
    			RelativeLayout relativeLayout;
    			viewHolder = new ViewHolder();
    			
    			layoutInflater =
    					(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    			convertedView = layoutInflater.inflate(R.layout.list_item_layout, null);
    			relativeLayout = (RelativeLayout)convertedView;
    			viewHolder.imageView =
    					(ImageView)relativeLayout.findViewById(R.id.listItemImageView);
    			viewHolder.nameTextView =
    					(TextView)relativeLayout.findViewById(R.id.listItemNameTextView);
    			viewHolder.priceTextView =
    					(TextView)relativeLayout.findViewById(R.id.listItemPriceTextView);
    			convertedView.setTag(viewHolder);
    		}
    		
    		viewHolder = (ViewHolder)convertedView.getTag();
    		viewHolder.imageView.setImageResource(imageIDs[position]);
    		viewHolder.nameTextView.setText(names[position]);
    		viewHolder.priceTextView.setText(prices[position] + " ريال");
    		
    		return convertedView;
    	}
    همونطور که ميبينيد اول يک View ساختيم و view رو که ورودي تابع هست بهش داديم. يک ViewHoder هم ساختيم که در ادامه ازش استفاده ميکنيم دفعه ي اول اين convertedView برابر null هست. براي همين بايد اول شکل سطر رو مشخص کنيم. بنابر اين اگر برابر null بود اول يک LayoutInflater ميسازيم. LayoutInflater کارش اين هست که يک view بر اساس يک فايل xml بسازه. يک شي از RelativeLayout هم ساختيم تا RelativeLayout اصلي رو که بقيه ويو ها توش هست درونش قرار بديم.
    در دو خط بعدي layoutInflater رو به شکلي که ميبينيد دريافت ميکنيم.
    بعد هم با استفاده از تابع inflate سطر مورد نظر رو ميسازيم. دو تا ورودي داره. وردوي اول فايل xml سطر و دومي رو هم ميتونيم null قرار بديم.

    الان در اصل convertedView يک RelativeLayout هست. ولي چون خود RelativeLayout از View به ارث ميبره الان اين امکان فراهم شده که در شي از جنس view قرار بگيره. ولي بايد اونو تبديل کنيم به RelativeLayout که در خط بعد اينکارو انجام ميديم.
    حالا درون viewHolder اون View هاي داخل فايل xml رو قرار ميديم. بعد با استفاده از setTag ميديم به convertedView . تابه setTag هرچيزي رو ميتونه بگيره. الان ViewHolder بهش ميديم تا در ادامه و دفعات بعد که اين تابع صدا زده ميشه بتونيم با getTag اون رو دريافت کنيم و از ImageView و TextView هاي داخلي ViewHolder که قبلا پيدا شده استفاده کنيم. در خط بعدي اين اتفاق افتاده و از getTag استفاده ميکنيم. اينجا ديگه convertedView برابر null نيست. چون يا در شرط قبلي ساخته شده يا وقتي تابع صدا زده شده در دفعات بعدي ديگه قبلا ساخته شده.

    بعد فقط تصوير و ... اون سطر رو مشخص ميکنيم و سطر رو بر ميگردونيم.

    اين کد کامل Adapter :


    کد:
    package ir.tutorial.app6_speciallistview;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    
    public class SpecialListViewAdapter extends BaseAdapter {
    	
    	String[] names = {"Beaglebone Black BB-Black", 
    					 "ماژول بلوتوث HC-05",
    					 "برد آموزشي حرفه اي ",
    					 "ماژول LCD 3.2 تمام رنگي",
    					 "ماژول شبکه ENC28J60",
    					 "ماژول ريدر RFID 13.56MHZ",
    					 "ماژول USB HOST"};
    	int[] prices = {3300000,200000,2350000,320000,180000,430000,380000};
    	int[] imageIDs = {R.drawable.beaglebone,
    					 R.drawable.bluetooth,
    					 R.drawable.board,
    					 R.drawable.lcd,
    					 R.drawable.net,
    					 R.drawable.rfid,
    					 R.drawable.usb_host};
    	
    	Context context;
    	
    	public SpecialListViewAdapter(Context context) {
    		this.context = context;
    	}
    	
    	@Override
    	public int getCount() {
    		return imageIDs.length;
    	}
    
    	@Override
    	public Object getItem(int arg0) {
    		
    		return null;
    	}
    
    	@Override
    	public long getItemId(int arg0) {
    		return 0;
    	}
    
    	@Override
    	public View getView(int position, View view, ViewGroup arg2) {
    		View convertedView = view;
    		ViewHolder viewHolder;
    		
    		if(convertedView == null)
    		{
    			LayoutInflater layoutInflater;
    			RelativeLayout relativeLayout;
    			viewHolder = new ViewHolder();
    			
    			layoutInflater =
    					(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    			convertedView = layoutInflater.inflate(R.layout.list_item_layout, null);
    			relativeLayout = (RelativeLayout)convertedView;
    			viewHolder.imageView =
    					(ImageView)relativeLayout.findViewById(R.id.listItemImageView);
    			viewHolder.nameTextView =
    					(TextView)relativeLayout.findViewById(R.id.listItemNameTextView);
    			viewHolder.priceTextView =
    					(TextView)relativeLayout.findViewById(R.id.listItemPriceTextView);
    			convertedView.setTag(viewHolder);
    		}
    		
    		viewHolder = (ViewHolder)convertedView.getTag();
    		viewHolder.imageView.setImageResource(imageIDs[position]);
    		viewHolder.nameTextView.setText(names[position]);
    		viewHolder.priceTextView.setText(prices[position] + " ريال");
    		
    		return convertedView;
    	}
    	
    	class ViewHolder
    	{
    		ImageView imageView;
    		TextView nameTextView;
    		TextView priceTextView;
    	}
    
    }
    حالا به MainActivity ميريم و اين آداپتور رو ميسازيم و به ليست نسبتش ميديم :

    کد:
    package ir.tutorial.app6_speciallistview;
    
    import android.os.Bundle;
    import android.widget.ListView;
    import android.app.Activity;
    
    public class MainActivity extends Activity {
    	
    	ListView listView;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		listView = (ListView)findViewById(R.id.listView);
    		SpecialListViewAdapter specialListViewAdapter =
    				new SpecialListViewAdapter(MainActivity.this);
    		listView.setAdapter(specialListViewAdapter);
    	}
    
    }
    حالا برنامه رو اجرا ميکنيم تا نتيجه رو ببينيم :


    http://up.ashiyane.org/images/fs64r9h0wxfef44wqc4.png

    خوب براي اين قسمت تقريبا کافيه. ان شاءالله در قسمت هاي بعدي در غالب پروژه هاي ديگه بيشتر روي ليست ها کار ميکنيم.
    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
  8. #28
    2011/02/09
    مشهد
    485
    18

    پاسخ : آموزش برنامه نويسي اندرويد

    دوست عزیز بسیار متشکر بابت آموزش های عالی و خوب.

    اگر امکانش هست یک پروژه رو تعریف کنید و از صفر تا صد اون رو برنامه نویسی کنید.
    مثلا : یک اپ اندروییدی که بتونه از طریق وای فای/بلوتوث یک وسیله رو کنترل کنه.

    البته این یک مثال بود و شما با توجه به تجربه و وقت خودتون پروژه ای مناسب تعریف کنید تا ما هم استفاده کنیم.
    بازم متشکر.
  9. #29
    2012/01/04
    101
    2

    پاسخ : آموزش برنامه نويسي اندرويد

    نقل قول نوشته اصلی توسط PPED
    دوست عزيز بسيار متشکر بابت آموزش هاي عالي و خوب.

    اگر امکانش هست يک پروژه رو تعريف کنيد و از صفر تا صد اون رو برنامه نويسي کنيد.
    مثلا : يک اپ اندروييدي که بتونه از طريق واي فاي/بلوتوث يک وسيله رو کنترل کنه.

    البته اين يک مثال بود و شما با توجه به تجربه و وقت خودتون پروژه اي مناسب تعريف کنيد تا ما هم استفاده کنيم.
    بازم متشکر.
    خواهش ميکنم. قابلي نداره.

    از اول قصدم اين بود که به درد الکترونيک و روباتيک بخوره. ولي براي اينکه افراد بيشتري بتونند استفاده کنند بهتره از اول اول شروع بشه. ولي خودم هم ميخام اينارو زود تموم کنيم و سرغ کارهاي عملي تر بريم
    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
  10. #30
    2012/01/04
    101
    2

    پاسخ : آموزش برنامه نويسي اندرويد

    تست برنامه روي دستگاه واقعي

    بهترين چيز براي تست برنامه هايي که مينويسيم گوشي يا ... واقعي هست. ما ميتونم با خود Eclipse سريع برنامه رو روي گوشي تست کنيم. براي انکار اول بايد درايور گوشي رو نصب کنيد. اگه نرم افزار هاي داخل CD گوشي رو نصب کنيد به احتمال زياد درايور مربوطه هم نصب ميشه. اگه هم سي دي رو نداريد توي اينترنت دنبال USB Driver گوشيتون بگرديد.

    بعد هم بايد به سراغ تنظيمات گوشي بريد و USB Debug رو فعال کنيد. اين گزينه با توجه به نسخه سيستم عامل گوشي جاها مختلفي ميونه باشه. مثلا :



    http://up.ashiyane.org/images/i86h0j3bu8kf4pw81pou.png


    http://up.ashiyane.org/images/r34am9jiwccpuh3qiopw.png

    يا مثلا من گوشيم اندرويد 2.3.6 داره و زبانش رو فارسي هست توي تنظيمات -> برنامه هاي -> پيشرفت -> اشکال دايي USB قرار داره .

    حالا گوشي رو با کابل USB وصل کنيد به سيستم. بعد همون پروژه رو مثل وقتي براي شبيه ساز اجرا ميکرديد اجرا کنيد. اينبار يک ليست مياد که دستگاه ها و شبيه ساز هايي که ميشه برنامه رو توش تست کرد نشون ميده. حالا گوشيتون رو پيدا کنيد و روش دوبار کليک کنيد يا ok رو بزنيد



    http://up.ashiyane.org/images/rigsplsgnhnirbxo6w.png
    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
صفحه 3 از 7 نخست 1234567 آخرین
نمایش نتایج: از 21 به 30 از 65

موضوعات مشابه

  1. کتاب آموزش برنامه نويسي C
    توسط MRM_ENG در انجمن برنامه نويسي و اينترفيس
    پاسخ: 0
    آخرين نوشته: 2014/04/22, 22:10
  2. مشکلات نوپاهاي برنامه نويسي اندرويد!
    توسط masoud_m_bf در انجمن Android
    پاسخ: 9
    آخرين نوشته: 2014/04/16, 23:08
  3. پاسخ: 29
    آخرين نوشته: 2014/03/26, 10:08
  4. منتقل شده: آموزش برنامه نويسي ARM از 0 تا 100
    توسط Ali-8701533 در انجمن پروسسورهای ARM
    پاسخ: 0
    آخرين نوشته: 2014/03/25, 22:19
  5. آموزش برنامه نويسي
    توسط abolfazl.69 در انجمن C , C++ , C#
    پاسخ: 1
    آخرين نوشته: 2011/08/10, 08:24

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •