خلاصه نویسی های برنامه نویسی اندروید

طبق آموزش سایت فرادرس و مکتب خونه

خلاصه نویسی های برنامه نویسی اندروید

طبق آموزش سایت فرادرس و مکتب خونه

دارم برنامه نویسی اندروید یاد می گیرم هر چی یاد می گیرم این جا می نویسم ایشالا
هر کی خواست دوره مکتب خونه رو بخره بگه من بهش کد تخفیف ۴۰ درصد بدم!

طبقه بندی موضوعی

۱۷ مطلب در ارديبهشت ۱۳۹۹ ثبت شده است

پی بردم که فرق null و empty رو تا حالا نمی دونستم!

null ینی تا حالا مقداردهی نشده empty ینی توش مقدار داره مقدار خالی!

واسه همینه که کد زیر تو لاگ می نوشته :

string winner: is null.

ولی تو if نمی رفته و شرطش false میشده 

Log.d("folder string winner","is "+folder.getString("winner",null)+".");

        if(folder.getString("winners",null).equals(null)){
            Log.d("if workes","hiiii");
            rr=new ranklist();
        }

از equals در رشته ها برای مقدار رشته ای داخل اونا استفاده میشه برای بررسی null بودن هر شی باید از == استفاده کنید.

در مثال خودتون بهتره که وجود نداشت یه رشته خالی بده و بعد با isEmpty بررسیش کنید که خالی هست یا نه

مقدار null به این معنی هست که اصلا مقداری به شی مورد نظر داده نشده و empty یعنی یک رشته خالی داخلش قرار داده شده. وقتی از sharedpreference مقداری رو میگیریم یک defualtvalue وجود داره به این معنی که اگر رشته مورد نظر وجود نداشت چه چیزی رو باید برگردونه. اصولی اینه که بگیم که رشته خالی برگردون تا اینکه null بده.

 

============

توضیح جاواکاپ دامت برکاته :

سلام سوال بسیار خوبی را مطرح کردید.

فرض کنید که اول شرط خالی بودن را چک میکنید در حالی که رشته null است. بررسی خالی بودن یک رشته با فراخوانی متدهایی نظیر length یا isEmpty انجام میشود. در زبان جاوا اگر دسترسی به فیلد یا فراخوانی متد روی یک شی که null است انجام شود خطای NullPointerException پرتاب میشود که در این سوال باعث شکست تست میشود. اما اگر اول شرط null بودن چک شود، اگر رشته null باشد همان ابتدا عبارت شرطی به خاطر مفهوم اتصال کوتاه در عملگر && مقدار false را بر میگرداند (هنگامی که یکی از عملوندها در عملگر && مقدار false داشته باشد عبارت صرفه نظر از این که عملگر دیگر چیست false خواهد بود) و دیگر شرط خالی بودن اصلا اجرا و بررسی نمیشود که موجب خطای NullPointerException شود.

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ ارديبهشت ۹۹ ، ۰۲:۰۱
Put Yourself First

البته این کد اگه استرینگ خالی بنویسی بزنی ادد یوزر اپ کرش میکنه!!

new->valuse resource file -> dimens:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="small_space">9dp</dimen>


</resources>

user.java

package ir.ben.practice;

public class user {
    private String name;
    private Integer score;
    private Integer rank;

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setScore(int score) {
        this.score = score;
    }
}

MainActivity

package ir.ben.practice;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
Button bt,sho;
Integer n=9;
user hooloo;
    ranklist rr=new ranklist();

EditText tv,tnumv;
String ss;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        hooloo=new user();
        hooloo.setScore(23);
        hooloo.setName("OKKKK");

        bt=findViewById(R.id.button);
        sho=findViewById(R.id.openlist);
        tv=findViewById(R.id.tv);
        tnumv=findViewById(R.id.num);

        sho.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyFragment frag=new MyFragment();
                getSupportFragmentManager().beginTransaction().add(R.id.frame,frag).addToBackStack(null).
                        commit();

            }
        });

        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hooloo.setName("*"+tv.getText().toString());
                hooloo.setScore(Integer.valueOf("1"+tnumv.getText().toString()));
                GoodShared.getInstance(MainActivity.this).addToWinnersNames(hooloo);
                rr=GoodShared.getInstance(MainActivity.this).getWinnersNames();
                tv.setText("SharedPrefrense ranklist size="+rr.getPeople().size());
                Log.d("starlog","kooft");
                for(user u:rr.getPeople())
                {
                    Log.d("win=    ",u.getName()+"  score: "+u.getScore());
                }
            }
        });
    }
}

Goodshared

package ir.ben.practice;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import com.google.gson.Gson;

public class GoodShared {

    private static GoodShared instance=null;
    private SharedPreferences folder=null;
    private SharedPreferences .Editor writer=null;
    private ranklist rn=new ranklist();
    private    Gson gg=new Gson();

    public static GoodShared getInstance(Context context)
    {
        if(instance==null)
            instance=new GoodShared(context);
        return instance;
    }
    private GoodShared(Context context)
    {
        folder=context.getSharedPreferences("winners",Context.MODE_PRIVATE);
        writer=folder.edit();
   //     rn=new ranklist();
    }

    public ranklist getWinnersNames()
    {
        return gg.fromJson(folder.getString("winners",null),ranklist.class);
    }

    public void addToWinnersNames(user hooloo)
    {
        String ss=folder.getString("winners",null);
        if(ss!=null)
            rn=gg.fromJson(ss,ranklist.class);
        else
            rn=new ranklist();
        rn.addnewuser(hooloo);
     //   writer.putString("winners",hooloo.getName());
        writer.putString("winners",gg.toJson(rn,ranklist.class));
        writer.apply();
    }
}

ranklist

package ir.ben.practice;

import java.util.ArrayList;
import java.util.List;

public class ranklist {
    private List<user> people;

    public ranklist() {
        people=new ArrayList<>();
    }


    public void addnewuser(user u){
        people.add(u);
    }


    public List<user> getPeople() {
        return people;
    }

    public void setPeople(List<user> people) {
        this.people = people;
    }
}

Myfragment

package ir.ben.practice;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.gson.Gson;

import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;

public class MyFragment extends Fragment {

    RecyclerView frend;
    assistanUserAdapter assisstan;
    ranklist mellat;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        frend=view.findViewById(R.id.bicycle);

//////        frend=viewfind

        mellat=GoodShared.getInstance(getActivity()).getWinnersNames();
        Comparator<user> how=new Comparator<user>() {
            @Override
            public int compare(user x, user y) {
                if(x.getScore()>y.getScore())
                    return -1;
                else if (x.getScore()<y.getScore())
                    return 1;
                return 0;
            }
        };

        Collections.sort(mellat.getPeople(),how);
        assisstan=new assistanUserAdapter(mellat.getPeople());
        Log.d("mellat  people size","="+mellat.getPeople().size());
       //// assisstan.notifyDataSetChanged();

        frend.setLayoutManager(new LinearLayoutManager(getActivity()));

         frend.setAdapter(assisstan);


   //     TextView tv=view.findViewById(R.id.hey);
     /////   tv.setText(this.getArguments().getString("namekey",null));
    }
}

 

assistantuser(adapter)

package ir.ben.practice;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class assistanUserAdapter extends RecyclerView.Adapter<assistanUserAdapter.ViewHolder> {

    private List<user> hulua;
    public assistanUserAdapter(List<user> items)
    {
        hulua=items;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View vv= LayoutInflater.from(parent.getContext()).inflate(R.layout.onerow,parent,false);
        return new ViewHolder(vv);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.name.setText(hulua.get(position).getName());
holder.rank.setText(String.valueOf(position+1));
holder.score.setText(String.valueOf(hulua.get(position).getScore()));
    }

    @Override
    public int getItemCount() {
        return hulua.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        public TextView name;
        public TextView score;
        public TextView rank;

        public ViewHolder(View heh){
            super(heh);

            score=heh.findViewById(R.id.adad);
            name=heh.findViewById(R.id.bach);
            rank=heh.findViewById(R.id.rank);
        }
    }


}

 

 

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ ارديبهشت ۹۹ ، ۰۵:۳۶
Put Yourself First
   Bundle bnd=new Bundle();
                bnd.putString("namekey",ss);
                MyFragment frag=new MyFragment();
                frag.setArguments(bnd);
             

سمت گیرنده:

        tv.setText(this.getArguments().getString("namekey",null));

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۰ ارديبهشت ۹۹ ، ۱۳:۴۷
Put Yourself First

برا این که تو SharedPreferences چیز غیر از اون دیفالتا هم بتونی بذاری چیزا رو تبدیل به json می کنی میدی دستش و بعدنم اول json می گیری بعد تبدیل به همون objectای که خودت میخوای می کنیش 

 

json یه string هست

سریال کردن ینی تبدیل آبجکت به رشته

دیسریال کردن ینی تبدیل رشته به آبجکت

 

هر json از یه object هم این طوریه

دو تا آکولاد که وسطش به ترتیب key, value ها نوشتن و وسط هر دو تا هم یه کاما داره

این طوری:

{
"Name":"khers",
"Phone":"343434
}

سریال کردن و دیسریال کردن:

user hooloo;
String ss;

hooloo=new user();
hooloo.setName("Hulu");
hooloo.setScore(34);
Gson ggg=new Gson();
ss=ggg.toJson(hooloo,user.class);
hooloo=ggg.fromJson(ss,user.class);

برا استفاده :

کنترل n  بعد انتخاب می کنی گتر و ستر بعد اسمش برات میسازه
میری این خطو تو بیلد گریدل ماژول اپ اضافه می کنی
  implementation 'com.google.code.gson:gson:2.8.6'

 

چاپ تنبلانه object 

کافیه تو کلاسی که ساختی کامند n رو بزنی و toString رو override کنی 

۰ نظر موافقین ۰ مخالفین ۰ ۱۰ ارديبهشت ۹۹ ، ۱۲:۲۲
Put Yourself First

یه دیالوگ که باز می کنی یه بی سیمم میدی دستش می تونه توش حرف بزنه اکتیویتی می شنوه

این بی سیمه چنتا دکمه داره هر دکمه یه تابعه (بی سیم=کال بک)

کال بک چیست؟ بی سیمی که اکتیویتی میده دست دیالوگ!

 

یه کلاس اینترفیس می خوای

package ir.ben.maktabkhoone;

public interface Listenerfordialog {
    void whatstheirname(String theirname);
}

یه کلاس دیالوگ می خوای

public class GetnamDialog extends Dialog {
    private Button ok;
    private String name;
    private EditText field;
    private Listenerfordialog hello;

    public GetnamDialog(@NonNull Context context,Listenerfordialog hi) {
        super(context);
        this.hello=hi;
        //this.listener=listener;
    }

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

        ok=findViewById(R.id.ok);
        field=findViewById(R.id.field);

        getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                name=field.getText().toString();
                hello.whatstheirname(name);
                dismiss();
            }
        });
    }
}

می خوای که از تو یه اکتیویتی دیالوگو باز کنی:

 GetnamDialog dialog=new GetnamDialog(MainActivity.this, new Listenerfordialog() {
                    @Override
                    public void whatstheirname(String theirname) {
                        hooloo.setName(theirname);
                        SharedPr.getInstance(MainActivity.this).editBestUser(hooloo);
                    }
                });
                dialog.show();

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۰ ارديبهشت ۹۹ ، ۱۱:۵۸
Put Yourself First

یه کلاس MyPreferencesManager می سازیم که فقط یه اینستنس ازش وجود داره :

package ir.ben.maktabkhoone;

import android.content.Context;
import android.content.SharedPreferences;

public class SharedPr {

    private static SharedPr instance=null;

    private SharedPreferences good=null;
    private SharedPreferences.Editor writer=null;

    public static SharedPr getInstance(Context context) {
        if(instance==null)
            instance=new SharedPr(context);
        return instance;
    }

    private SharedPr (Context context)
    {
        good=context.getSharedPreferences("mypreferences",Context.MODE_PRIVATE);
        writer=good.edit();
    }
    public int getHighScore()
    {
       return good.getInt("highscore",21);\\21 meghdare defaulte
    }
    public void editHighScore(Integer b)
    {
        writer.putInt("highscore",b);
        writer.apply();
    }
}

بیرون از خودش:

        SharedPr.getInstance(this).editHighScore(n);
        ttv.setText("Highest score: "+SharedPr.getInstance(getActivity()).getHighScore());
۰ نظر موافقین ۰ مخالفین ۰ ۰۹ ارديبهشت ۹۹ ، ۲۲:۴۲
Put Yourself First

۱- رنگ رو به جای سفید گذاشته بودم نامرئی!! صفر صفر صفر صفر ینی بی رنگ. واسه همین صفحه زیرش پیدا میشد

۲- وقتی بخوای فرگمنت بیاد سر استک وایسه باید از استک نال(!) استفاده کنی

۳- تو پروژه ماشین حساب موقع تقسیم بر صفر return می کرد و این باعث مشکل می شده! هنوز نفهمیدم چه مشکلی ولی وقتی returnشو برداشتم و گفتم کلا مثل آدمیزاد تا پایین پروژه رو بره نمره 100% رو گرفت

عدد تصادفی 
Integer n;
Random random=new Random();
n=random.nextInt();

Log.d("tag","clicked this button");

<string name="stopwatch_time_format">%02d:%02d:%02d:%03d</string>

stopw.setText(getString(R.string.stopwatch_time_format,3,3,3,3));

نکته یک: وقتی تایمر استارت شد بقیه برنامه بیکار نمی شینه راه خودشو میره هر از گاهی کارای توی تایمر هم همزمان انجام میده!
نکته دو:  تایمر رو باید استارت کنی تا کار کنه!


کلاس جاوایی که میسازی باید بری تو منیفست به عنوان اکتیویتی اسمشو بنویسی(من که یه راس نیو اکتیویتی می ساختم به اینم نیاز نداشتم!)

۱ نظر موافقین ۰ مخالفین ۰ ۰۹ ارديبهشت ۹۹ ، ۱۶:۵۰
Put Yourself First

 

    SimpleDateFormat df;
    TextView elapsed;
    Button startbt, pausebt;
    Long time=0L,starttime;
    Handler hn;
     df = new SimpleDateFormat("HH:mm:ss:SSS");
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
   
        hn=new Handler();

    private Runnable runnable =new Runnable() {
        @Override
        public void run() {
            time=SystemClock.uptimeMillis()-starttime;
            elapsed.setText(df.format(time));

            hn.postDelayed(this,0);
        }
    };

        elapsed.setText(df.format(0L));




startbt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                starttime = SystemClock.uptimeMillis();
                hn.postDelayed(runnable, 0);
            }
        });

        pausebt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                hn.removeCallbacks(runnable);
               }
        });

    @Override
    public void onPause() {
        super.onPause();
        hn.removeCallbacks(runnable);
    }

 

 

 

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۹ ارديبهشت ۹۹ ، ۱۶:۴۵
Put Yourself First
         CNTFragment cd=new CNTFragment();
                getFragmentManager().beginTransaction().add(R.id.frame,cd).addToBackStack(null)
                        .commit();
       

 

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.cntlayout, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        config(view);
        setonclickss();
    }


   if (TextUtils.isEmpty(min.getText()) || TextUtils.isEmpty(sec.getText()))
                    return;

                pausebt.setEnabled(true);


    CountDownTimer bomb;
  bomb = new CountDownTimer(total, 1000) {
                    @Override
                    public void onTick(long l) {
                            min.setText(doo(Integer.parseInt(min.getText().toString()) - 1));
                    }

                    @Override
                    public void onFinish() {
                        startbt.setText(getString(R.string.start));
                    }
                };
                bomb.start();
            }

        });

    @Override
    public void onPause() {
        super.onPause();
            bomb.cancel();
    }

 

 

 

 

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۹ ارديبهشت ۹۹ ، ۱۶:۴۱
Put Yourself First

تو کانسترینت لیوت مچ پرنت نداری باید دمباشو بچسبونی به چپ و راست پرنت بعد طولشو بذاری صفر- این طوری خودشو کش میاره می رسونه به جاهایی که دمبش چسبیده ولی اگه طولش مثلا رپ کانتنت باشه فضای خالی بین دو دمبشو نصف می کنه وسط می شینه 

 

یه وقتی هم هست نمی خوای کش بیاد میخوای از یه طرف شروع بشه بعد که محدودیتاشو دادی بایاس بهش میدی 

بایاس افقی= عددی بین صفر و یک که چپ چپ میشه صفر راست راست میشه یک

 

نسبت طول به عرض ratio = در این حالت باید یکی از عرض یا طولو ۰ دی پی داده باشی که آزاد باشه 

 

دکمه ها یه ارتفاعی دارن برا این که فرگمنت بیاد روی دکمه یه ارتفاع یا elevation بهش می دیم ولی این فرگمنته کلیکو از خودش رد می کنه! ینی با این که دکمه ها معلوم نیستن ولی هنوز کار می کنن

اگه بخوایم رد نکنه باید بریم تو روت ویوی فرگمنته بگیم clickable true

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ ارديبهشت ۹۹ ، ۱۸:۱۹
Put Yourself First

 

یه کلاس جاوا می سازی و extends fragment 

فرگمنت ینی هر تیکه از صفحه رو بدیم دست یه کسی هندل کنه (تو یه اکتیویتی)

 

می خوای یه فایلی باز کنی نخوای بری تو منوها بگردی: کامند شیفت N می زنی اسمشو می نویسی اگه هم نه باید بری تو میان برات نگاه کنی ببینی برا تو چیه 

 

اینفلیتر میاد یه view می کشه و return می کنه 

 

این اکتیویتی میزبانه فرگمنتا میرن توش قرار می گیرن 

این چیزی که تو layout این فرگمنتا توش قرار می گیرن Frame layout هست 

 

 

onview created توی فرگمنت

مثل همون oncreate توی اکتیویتی همه کدا رو می ریزیم این جا 

 

یه خاصیتی که فرگمنت داره اینه که findviewbyId نمی فهمه باید یه ویو بهش پاس بدی تا بفهمه از کدوم ویو داری حرف می زنی 

 

اگه یه فرگمنت بسته شده باشه ولی تو ویو توشو هنوز بخوای تغییر بدی کرش می کنی

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ ارديبهشت ۹۹ ، ۱۸:۱۸
Put Yourself First

 

کامند + او بعد اون دو تا رو انتخاب 

کنترل کلیک رو یه چیز= میگه کجاها استفاده شده

 

تایمر دو تا چیز می گیره یکی اینکه چند ثانیه به چند ثانیه یه صدایی به تو بزنه یکی این که چند ثانیه کلش طول بکشه

 

اکتیویتی lifecycle  

باگ

مثلا این شکلی تو یه بلاک آ یه چیز دامیه و تو بقیه برنامه نیستش دیگه؟؟؟

{
int a=0;
}

وقتی onCreate  بیشتر از ۵ ثانیه طول بکشه صفحه سیاه میشه و میگه ریسپاند نکرد

چیزایی که یه activity داره نشون میده فقط وقتی می تونی تغییر بدی که در حالت onResume() باشه

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ ارديبهشت ۹۹ ، ۱۸:۱۷
Put Yourself First

 

تایپ سه ستاره بشین

 

xml snake_case

java camelCase 

 

نصیحت استاد:

 

  • از طول متغیر نترسین اسم درس بذارین!
  • کاراتونو همه شو وسط راه ننویسین تو تابع بنویسین
  • برا هر متغیر یه خط بنویسید که برنامتون خوانا باشه. این طوری نکنید که چنتا متغیر تو یه خط تعریف کنی
  • رشته ها رو همین جور وسط راه مقدار ندید توی ریسورس یه فایل استرینگ هست همونجا بدین که اگه خواستی عوض کنی راحت باشه مخصوصا اگه وسطش چنتا عدد داره

 

 

تو linear layout جهتو نگی خودش افقی فرض می کنه

برا توی یه ویو gravity برا این که خودش کجا قرار بگیره layout gravity

 

 

null pointer exception 

تو به یه چیزی مقدار ندادی میخوای به مقداراش دسترسی داشته باشی 

 

متغیر فاینال تو جاوا= کانستنت

اسم گذاریشم این طوریه که مثل اسنیک کیس ولی همه ش با حروف بزرگ

 

آموزش git

git تو ترمینال بزن

mkdir make new folder

cd mire tu folder

git init   tracks the folder

ls hame file haye tusho minvise

cd.. back

git status mige dar che haalim

git add nameoffile

git add -A track all

git commit -m “hello world!” package and message

git diff pouch.txt latest diffrences since last commit

git log gozareshe  har kari    ta hala kardim

git checkoout 9e6800059cb3f5300cc495f5303537c91a8626e0    versiono nega koni

git checkout master

قبل کامیت کردن هر چی لازم داری پکیج کنی اددکن همون دستور ادد دش آ خوبه

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ ارديبهشت ۹۹ ، ۱۸:۱۵
Put Yourself First

نکات مکتب خونه فصل یک

اگه بخوای نوشته های تو یه تکست ویو وسط چین باشن  یا اینا از gravity خالی استفاده کن

باگ فرقش با alignment  چیه؟ 

 

برا دیدن این که هر ویو چه قسمتی از لیوت رو گرفته تو ایمولیتور: 

میری ستینگ 

about phone-> build number-> click 7 times->developer options->drwaing-> show layout bounds on  

 

اگه بخوای ببینی ورودی چی باید بدی command +P

edit text hint

 

کنترل + w  از این جا تا آخر خطو پاک می کنه

 

تبدیل string به int:

n=Integer.parseInt(s);

فقطم یه رشته که کاراکتراش عدد هستن می گیره وگرنه ارور میده خالی هم نباید باشه

 

برعکسش:

s=String.valueof(n);

یا حتی دابل:

d=Double.valueof(int n);

تو جاوا استرینگو این طوری اشاره می کنن

s[i]  =====  s.charAt(i)

۱ نظر موافقین ۰ مخالفین ۰ ۰۷ ارديبهشت ۹۹ ، ۰۷:۰۴
Put Yourself First
package ir.ben.frog;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class customlist extends AppCompatActivity {

    ListView lvv;
    ArrayList people;
    personadapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_customlist);
        lvv=findViewById(R.id.listvvv);
        people=new ArrayList<>();
        people.add(new person("hgfadg","2342342",R.drawable.profile1));
        people.add(new person("ababab","26666662",R.drawable.profile2));
        fake(4);
        people.add(new person("xthththth","235555552",R.drawable.profile3));
        people.add(new person("xzxzxzx","99999999",R.drawable.profile5));
        fake(3);
        people.add(new person("bgbgbgb","66666777",R.drawable.profile6));
        people.add(new person("rfrfrf","4444444",R.drawable.profile7));
        people.add(new person("qwqwqw","77778888",R.drawable.profile4));

        adapter=new personadapter(this,people);
        lvv.setAdapter(adapter);
    }

    private void fake(int i) {
        for(;i>0;i--)
            people.add(new person("fake"+i,"0898"+i,0));
    }
}
\\personadapter.java

public class personadapter extends ArrayAdapter {
    private List<person> contacts;
    public personadapter(@NonNull Context context, List<person> connames) {
        super(context, R.layout.newlayout, connames);
        this.contacts=connames;
    }

    @NonNull
    @Override\\\ این جا می نویسی گت ویو کلیک می کنی
    public View getView(int position, @Nullable View convertview, @NonNull ViewGroup parent) {
       person nev=contacts.get(position);
       vholder vh;
       if(convertview==null) {
           LayoutInflater infl = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           convertview = infl.inflate(R.layout.newlayout, parent, false);
           vh=new vholder();
           vh.impr=convertview.findViewById(R.id.pic);
           vh.namnam=convertview.findViewById(R.id.name);
           vh.numnum=convertview.findViewById(R.id.phone);
           vh.iconsms=convertview.findViewById(R.id.smsi);
           vh.iconcall=convertview.findViewById(R.id.calli);
           convertview.setTag(vh);

       }
       else
       {
           vh= (vholder) convertview.getTag();
       }
       vh.fill(nev);
        return convertview;
    }


    private  class vholder implements View.OnClickListener {
        public ImageView impr;
        public TextView numnum;
        public TextView namnam;
        public ImageView iconsms,iconcall;

        public void fill(person nev){
            impr.setImageResource(nev.getId());
            numnum.setText(nev.getNumber());
            namnam.setText(nev.getName());
            iconcall.setTag(nev.getNumber());
            iconsms.setTag(nev.getNumber());
            iconsms.setOnClickListener(this);
            iconcall.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            Intent intent=new Intent(Intent.ACTION_VIEW);
            String number= (String) v.getTag();
            if(v==iconcall)
            {
                intent.setData(Uri.parse("tel:"+number));
                getContext().startActivity(intent);
            }
            else if(v==iconsms)
            {
                intent.setData(Uri.parse("sms:"+number));
                getContext().startActivity(intent);

            }
        }
    }
}
\\person.java +I didnt write setters for it!
package ir.ben.frog;

public class person {

    private String name;
    private String number;
    private int id;

    public person(String name,String number,int id){
        this.name=name;
        this.number=number;
        this.id=id;
    }
//i skipped the setters
    public String getName(){return name;}
    public String getNumber(){return number;}
    public int getId(){return id;}

    public String toString(){return name;}
}

۰ نظر موافقین ۰ مخالفین ۰ ۰۲ ارديبهشت ۹۹ ، ۱۷:۴۵
Put Yourself First

اول غر خودمو اعلام کنم. این دوره مزخرفه! هزار ساعت وقت ما رو می گیره که آزمون و خطا کنه. کاش از همون اولم مکتب خونه رو خریده بودم تا الانم تموم شده بود. نتیجه اخلاقی: فرادرس خر است مکتب خونه گل است!! به ندای درون خود گوش کنید 

همیشه حرف آخرو کار درست میزنه نه هزینه‌هایی که تا حالا کردی!

بعد نوشت: من این یادگیری سریع مکتب خونه رو البته قسمتی شو مدیون این هستم که فرادرس مورچه به مورچه خودش جلو چشممون پیاده سازی میکنه!

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:id="@+id/listvvv"
        android:dividerHeight="3dp"
        />

فایل newlayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/pic"
        android:layout_width="128dp"
        android:layout_height="128dp"
        android:layout_margin="5dp"
        android:scaleType="fitXY"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        app:srcCompat="@drawable/babe" />

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/pic"
        android:layout_alignTop="@id/pic"
        android:layout_marginTop="15dp"
        android:layout_marginLeft="10dp"
        android:textSize="16sp"
        android:text="name" /><!--        android:layout_toEndOf="@+id/pic"-->



    <TextView
        android:id="@+id/phone"
        android:layout_width="wrap_content"
        android:layout_height="25dp"
        android:layout_below="@+id/name"
        android:layout_marginStart="75dp"
        android:layout_marginTop="21dp"
        android:layout_toEndOf="@+id/pic"
        android:text="num" />


    <ImageView
        android:id="@+id/smsi"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_alignBottom="@+id/pic"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="10dp"
        app:srcCompat="@android:drawable/ic_input_add" />

    <ImageView
        android:id="@+id/calli"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginRight="10dp"

        android:layout_alignBottom="@+id/smsi"
        android:layout_toLeftOf="@id/smsi"
        app:srcCompat="@android:drawable/ic_menu_call" />
</RelativeLayout>

اینفلیتر: از چیزی که جنسش جاوا نیس ویو میسازه تحویلت میده البته من که سرچ کردم همچی توضیحی پیدا نکردم و جلسه ۱۵ رو هم نفهمیده ول کردم به امون خدا اومدم سراغ مکتب خونه! تا بعدا ببینم بهم معنی میده یا نه؟

۰ نظر موافقین ۰ مخالفین ۰ ۰۲ ارديبهشت ۹۹ ، ۱۷:۱۷
Put Yourself First
package ir.ben.frog;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class SimpleList extends AppCompatActivity {

        ArrayAdapter adapter;
        ListView lv;
        List<String> names;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple_list);
        lv= findViewById(R.id.listv);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(SimpleList.this, names.get(position)+" is here", Toast.LENGTH_SHORT).show();
            }
        });
        names=new ArrayList<>();
        names.add("Hi");
        names.add("hello");
        names.add("jhjhk");
        names.add("hjhjkh");
        names.add("xcxc");
        names.add("poppo");
        names.add("qwqeq");
        names.add("xdygy");
        names.add("bhnhm");
        names.add("kmklkm");
        names.add("tytyt");
        names.add("iouiui");
        names.add("asasas");

        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names)
        /*{
            @NonNull
            @Override
            public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                return super.getView(position, convertView, parent);
            }
        }*/
        ;
        lv.setAdapter(adapter);
        refresh();
    }

    private void refresh() {
         adapter.notifyDataSetChanged();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("Add").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                names.add("Heyyy");
                adapter.notifyDataSetChanged();
                return false;
            }
        });
        menu.add("Remove").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                if(names.isEmpty())
                    return false;
                names.remove(names.size()-1);
                adapter.notifyDataSetChanged();
                return false;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }


}

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۱ ارديبهشت ۹۹ ، ۱۳:۵۲
Put Yourself First