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

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

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

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

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

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

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

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

کنترل شیفت می زنی ایمپورتای اضافه برداشته میشه

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

alert dialog 

progress dialog

 

باگ  handler چیه؟ چرا وقتی یه هندلر میذارم تو یه تایمر کرش می کنه؟

نکته setprogress رو اگه قبل show بذاری هیچی به هیچی! باید بعدش بذاری

package ir.ben.frog;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;

public class dialog extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
    }
 public void custmzd(View view)
 {
     Dialog dd=new Dialog(this);
     dd.setTitle("This I made myself");
    // dd.setContentView(R.layout.activity_dialog);
     dd.setContentView(R.layout.havij);//this can cause to make lots of dialogs on top of each other!
     dd.show();
 }
public void Multichoice(View view)
{
    final String[] opt=new String[] {"Salad", "Bread", "Drink", "Jelly"};
        AlertDialog.Builder bmc=new AlertDialog.Builder(this);
        bmc.setTitle("Do you want?")
                .setPositiveButton("OK",null)
                .setMultiChoiceItems(opt, new boolean[]{false, true, false, true}, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        if(isChecked)
                        Toast.makeText(dialog.this, opt[which]+" is chosen", Toast.LENGTH_SHORT).show();
                        else
                            Toast.makeText(dialog.this, opt[which]+" is deleted", Toast.LENGTH_SHORT).show();
                    }
                });

        bmc.show();
}
    public void alertchoicedial(View view)
    {
        AlertDialog.Builder bcd=new AlertDialog.Builder(this);
        //bcd.setMessage("Please Choose:") it substitutes the choices

          bcd.setTitle("Please choose")
                  .setCancelable(false)
                  .setPositiveButton("OK",null)
                  .setSingleChoiceItems(new String[]{"A", "B", "C"}, -1, new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialog, int which) {
                          Toast.makeText(dialog.this, "Item "+which+" is chosen", Toast.LENGTH_SHORT).show();
                      }
                  });
          AlertDialog add=bcd.create();//If you want to say dismiss you can use this line,I couldn't get it work btw!
        bcd.show();

    }
    public void alertdial(View view)
 {
     AlertDialog.Builder bd=new AlertDialog.Builder(this);
     bd.setTitle("OH")
        .setMessage("SURE?")
        .setCancelable(false)
        .setIcon(android.R.drawable.ic_menu_delete)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(dialog.this,which+ "I delete the file", Toast.LENGTH_SHORT).show();
            }
        })
        .setNegativeButton("No",null)
        .setNeutralButton("cancel",null);
     bd.show();
 }

 public void progrs(View view)
 {
     final ProgressDialog pd=new ProgressDialog(this);
     pd.setCancelable(true);
     pd.setTitle("Hey");
     pd.setMessage("Question?");
     pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  //   pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
  ////   pd.setIndeterminate(true);
     pd.show();
     pd.setProgress(10);
     pd.setSecondaryProgress(14);
     new Timer().scheduleAtFixedRate(new TimerTask() {
         @Override
         public void run() {
             if(pd.getProgress()<pd.getMax())
                 pd.incrementProgressBy(1);
             else
             {
                 pd.dismiss();
                /* new Handler().postDelayed(new Runnable() {
                     @Override
                     public void run() {
                         pd.dismiss();
                     }
                 },1000L);*/
             }


         }
     }, 0, 50L);

     new Timer().scheduleAtFixedRate(new TimerTask() {
         @Override
         public void run() {
         //////    if(pd.getSecondaryProgress()<pd.getMax())
                 pd.incrementSecondaryProgressBy(1);
         }
     }, 0, 20L);


/*     new Handler().postDelayed(new Runnable() {
         @Override
         public void run() {
                pd.dismiss();
         }
     },1000L);*/
 }
}


 

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

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

import java.util.Timer;
import java.util.TimerTask;

public class audplayer extends AppCompatActivity implements View.OnClickListener {
    MediaPlayer mp;
    SeekBar volbar,scroll;
    AudioManager mang;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audplayer);
        volbar =findViewById(R.id.seekBar);
        scroll=findViewById(R.id.scroll);
        mp= MediaPlayer.create(this,R.raw.demoaudio);

        //////Audio manager
        mang= (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        int maxvol=mang.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curvol=mang.getStreamVolume(AudioManager.STREAM_MUSIC);

        scroll.setMax(mp.getDuration());
        scroll.setProgress(0);
        new Timer().scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                scroll.setProgress(mp.getCurrentPosition());

            }
        },0,100);

        scroll.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(mp!=null && fromUser)
                mp.seekTo(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        volbar.setMax(maxvol);
        volbar.setProgress(curvol);


        mp.start();

        volbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                mang.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }

    @Override
    public void onClick(View v) {

    }
}

 

۰ نظر موافقین ۰ مخالفین ۰ ۳۰ فروردين ۹۹ ، ۰۷:۰۶
Put Yourself First
package ir.ben.frog;

import androidx.appcompat.app.AppCompatActivity;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;

public class audplayer extends AppCompatActivity implements View.OnClickListener {
    MediaPlayer mp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audplayer);
        Button playb=findViewById(R.id.playb);
        Button pausb=findViewById(R.id.stopb);
        mp= MediaPlayer.create(this,R.raw.demoaudio);
        mp.start();
        playb.setOnClickListener(this);
        pausb.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id.playb:
                mp.start();
                break;
            case R.id.stopb:
                if(mp.isPlaying())
                    mp.pause();
                else
                    mp.start();
                break;
            default:break;
        }
    }
}
package ir.ben.frog;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

public class audplayer extends AppCompatActivity implements View.OnClickListener {
    MediaPlayer mp;
    SeekBar volbar,scroll;
    AudioManager mang;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audplayer);
        Button playb=findViewById(R.id.playb);
        Button pausb=findViewById(R.id.stopb);
        volbar =findViewById(R.id.seekBar);
        scroll=findViewById(R.id.scroll);
        mp= MediaPlayer.create(this,R.raw.demoaudio);

        //////Audio manager
        mang= (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        int maxvol=mang.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curvol=mang.getStreamVolume(AudioManager.STREAM_MUSIC);

        volbar.setMax(maxvol);
        volbar.setProgress(curvol);


        mp.start();
        playb.setOnClickListener(this);
        pausb.setOnClickListener(this);

        volbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                mang.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }

    @Override
    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id.playb:
                mp.start();
                break;
            case R.id.stopb:
                if(mp.isPlaying())
                    mp.pause();
                else
                    mp.start();
                break;
            default:break;
        }
    }
}

skb.setProgress(120); skb.setMax(150); mang.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);

 

get system service 

سیستم سرویس ینی چیزی که مال دیوایسه مال برنامه من نیس 

۰ نظر موافقین ۰ مخالفین ۰ ۲۶ فروردين ۹۹ ، ۱۹:۰۱
Put Yourself First
package ir.ben.showvideo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        VideoView vvv=findViewById(R.id.videoView);
        vvv.setVideoPath("android.resource://"+getPackageName()+"/"+R.raw.demovideo);
        MediaController mp=new MediaController(this);
        mp.setAnchorView(vvv);
        vvv.setMediaController(mp);
        vvv.start();
    }
}

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

باگ

اول میگه can’t play this video بعد شروع میکنه پلی میکنه!! 

باگ

کنترلر برا من نمیاد که

<?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"
    android:background="#FFEB3B"
    tools:context=".VideoActivity">

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        />
</RelativeLayout>

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

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

Prepare video clip

According to the documentation, Android should support mp4 H.264 playback (decoding) for all API levels. However, there seem to be a lot of factors that affect whether an actual video will play or not. The most in depth answer I could find that told how to encode the videos is here. It uses the powerful ffmpeg command line tool to do the conversion to something that should be playable on all (hopefully?) Android devices. Read the answer I linked to for more explanation. I used a slightly modified version because I was getting errors with the original version.

ffmpeg -y -i input_file.avi -s 432x320 -b:v 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -c:a aac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -strict -2 output_file.mp4

I would definitely read up a lot more on each of those parameters to see which need adjusting as far as video and audio quality go.

Next, rename output_file.mp4 to test.mp4 and put it in your Android project's /res/raw folder. Create the folder if it doesn't exist already.

 

ایشونه گفته

https://stackoverflow.com/questions/3263736/playing-a-video-in-videoview-in-android

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

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

میخوای دایرکتوری ایجاد کنی باید بری تو res بزنی new Android Resource Directory تا بیاره!

 

چهار ساعته من دارم کف نتو می گردم و آخر فهمیدم خود ویدئوهه compatible نبوده با این که میگه هستم، دروغ میگه و دروغگو سگه 

باید با VLC player به فرمت جدیدی تبدیلش کنی

https://stackoverflow.com/questions/24730087/cant-play-this-video-android-videoview-mp4-recorded-by-android-device 

 

اینجا ملت تونستن منم یه کانورتی کردم ولی صدا نداشت چون VLC playerم مال ۲۰۱۶ بود ایشالا اگه عمری بود این ارور مزخرفو سرجاش میشونم ! خر خر خر !!

خطای Can't play this Video در اندروید استودیو  VideoView

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۸ فروردين ۹۹ ، ۲۱:۳۸
Put Yourself First

دیگه فقط مونده عکسای کدهای استاد. اینم انجام نمیدم همین جوری میذارمش بمونه.

 

باگ فرق padding  و margin چیه؟

مارجین از دورش فاصله میذاره پدینگ مثلا پدینگ 10dpدادی میاد به اندازه ۱۰ تا از توی خودش کوچیکتر میشه ولی اون ۱۰ تای دورش جزو تصویره

سوال یه پدینگ با بک گراند بذارم ببینم چه شکلی میشه

 

مدل دیگر for زدن روی آرایه

winpos یک آرایه دو بعدی است

    private void checkwinner() {

        for(int[] j:winpos){

            if(fl[j[0]]!=empty && fl[j[0]]==fl[j[1]] &&fl[j[1]]==fl[j[2]])
            {
                String happy=(turn==rng)?"Orange":"Blue";
                TextView khosh=findViewById(R.id.newstext);
                khosh.setText("Player "+happy+" Won!");
                findViewById(R.id.news).setVisibility(View.VISIBLE);
                return;
            }
        }
    }
۰ نظر موافقین ۰ مخالفین ۰ ۱۴ فروردين ۹۹ ، ۱۳:۲۵
Put Yourself First

آخیش! پروژه تموم میشه آدم خستگی از تنش در میاد خدایا شکرت:)

فایل game.xml

<?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"
    android:orientation="vertical"
    tools:context=".game">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="360dp"
        android:id="@+id/goodlayout"
        android:background="@drawable/grid"
        android:backgroundTint="#FFEB3B"
        android:layout_centerInParent="true"
        android:orientation="vertical">

        <LinearLayout
 android:paddingBottom="8dp"
            android:paddingTop="8dp"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="0"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="1"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="2"
                tools:srcCompat="@drawable/bl" />
        </LinearLayout>

        <LinearLayout
            android:paddingBottom="8dp"
            android:paddingTop="8dp"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="3"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="4"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="5"
                tools:srcCompat="@drawable/bl" />
        </LinearLayout>

        <LinearLayout
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="6"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="7"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="8"
                tools:srcCompat="@drawable/bl" />
        </LinearLayout>
    </LinearLayout>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="160dp"
    android:id="@+id/news"
    android:layout_marginLeft="80dp"
    android:layout_marginRight="80dp"
    android:background="#FFC107"
    android:layout_centerInParent="true">

    <TextView
        android:id="@+id/newstext"
        android:textAlignment="center"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:layout_centerHorizontal="true"
        android:text="Hey!!" />

    <Button
        android:id="@+id/button"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/newstext"
        android:layout_width="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_height="50dp"
        android:text="Play Again!"
        android:onClick="restart"
        />
</RelativeLayout>

</RelativeLayout>

فایل game.java

package ir.ben.frog;

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

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class game extends AppCompatActivity {
   public static final int empty=0,rng=1,blu=2;
    int turn=rng,sum=0;
    int [] fl={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    int[][] winpos={{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem resst = menu.add("New Game");
        resst.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        resst.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                restart(null);
                return false;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if (item.getItemId() == android.R.id.home)
            finish();
        return super.onOptionsItemSelected(item);
    }


    public void putbutton(View v) {
        ImageView img= (ImageView) v;

        int pos=Integer.parseInt((String) v.getTag());
        if(fl[pos]!=empty)
            return;

        if(turn==rng)
                img.setImageResource(R.drawable.or2);
        else
                img.setImageResource(R.drawable.bl);
        fl[pos]=turn;
        checkwinner();
        turn=rng+blu-turn;
        sum++;
        if(sum==9)
        {
            TextView xxx=findViewById(R.id.newstext);
            xxx.setText("DraW!");
            findViewById(R.id.news).setVisibility(View.VISIBLE);
        }
    }

    private void checkwinner() {
        for(int j=0;j<winpos.length;j++)
        {
            if(fl[winpos[j][0]]!= empty && fl[winpos[j][0]]==fl[winpos[j][1]] && fl[winpos[j][1]]==fl[winpos[j][2]])
            {
                String happy=(turn==rng)?"Orange":"Blue";
                TextView khosh=findViewById(R.id.newstext);
                khosh.setText("Player "+happy+" Won!");
                findViewById(R.id.news).setVisibility(View.VISIBLE);
                return;
            }
        }
    }

    public void restart(View view) {
        findViewById(R.id.news).setVisibility(View.GONE);
        for(int j=0;j<10;j++)
            fl[j]=0;
        sum=0;
        turn=rng;
        LinearLayout biglay=findViewById(R.id.goodlayout);//cast
        for(int i=0;i<biglay.getChildCount();i++)
        {
            LinearLayout lay= (biglay.getChildAt(i) instanceof LinearLayout)? (LinearLayout) biglay.getChildAt(i) :null;
            if(lay==null) return;
            ImageView heh;
            for(int j=0;j<lay.getChildCount();j++)
            {
                heh= (lay.getChildAt(j) instanceof ImageView)? (ImageView) lay.getChildAt(j) :null;
                if(heh==null)return;
                heh.setImageResource(0);
            }
        }

    }


}

خدایا چقد اسکل شده بودم یه جا که به خاطر این که fl[pos] به جاش نوشته بودم pos هی کار نمی کرد تو winner 

یه جا هم موقع مقدار دهی fl که میخواستم همه رو صفر بذارم فقط fl[0] صفر شده بود اینم اولین زخمی که از جاوا خوردم!

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

تو فایل xml یه onclick گذاشتم:

    <ImageView
        android:id="@+id/sid"
        app:srcCompat="@drawable/sid"

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:scaleType="fitCenter"
        android:alpha="1"
        android:onClick="dance"
        />

و اون dance تو havij.java رو public کردم:

package ir.ben.frog;

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

import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;

public class havij extends AppCompatActivity {
    ImageView photo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.havij);

        photo=findViewById(R.id.sid);//instructor cast
        photo.setAlpha(0f);
     // photo.setTranslationX(-300);         dance(photo);
        if(getSupportActionBar()!=null)
        {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if(item.getItemId()==android.R.id.home)
            finish();
        return super.onOptionsItemSelected(item);
    }


    public void dance(View v) {

        v.animate().alpha(1f-v.getAlpha()).setDuration(1500);

    }
}

چن تا انیمیشن دیگه:

    public void dance(View v) {
        v.animate().scaleX(-0.2f).scaleYBy(-0.2f).setDuration(1000);
    //  v.animate().rotationBy(180f).setDuration(1000);
    //  v.animate().rotationXBy(180f).rotationYBy(180f).setDuration(1200);
    //  v.animate().translationYBy(100).translationXBy(200).setDuration(1000);
    }
}

معنی اسکیل بای ها ینی آفست یعنی هر چی هست اونقدتای دیگه هم بهش اضافه کن

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

آبی پررنگه دکمه بازگشت میذاره تو اکشن بار

فایل havij.java

package ir.ben.frog;

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

import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;

public class havij extends AppCompatActivity implements View.OnClickListener {
    ImageView photo;
    ImageView photo2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.havij);

        photo=findViewById(R.id.kola);//instructor cast
        photo2=findViewById(R.id.babe);
        photo.setOnClickListener(this);
        photo2.setOnClickListener(this);
        if(getSupportActionBar()!=null)
        {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if(item.getItemId()==android.R.id.home)
            finish();
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
     //   if(v.getId()==photo.getId())
            dance();
    }

    private void dance() {

        photo.animate().alpha(1f-photo.getAlpha()).setDuration(2000);
        photo2.animate().alpha(1f-photo2.getAlpha()).setDuration(2000);

    }
}

فایل havij.xml

<?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"
    tools:context=".havij">


    <ImageView
        android:id="@+id/kola"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:scaleType="fitCenter"
        android:alpha="1"
        app:srcCompat="@drawable/kola" />

    <ImageView
        android:id="@+id/babe"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:scaleType="fitCenter"
        android:alpha="0"
        app:srcCompat="@drawable/babe" />
</RelativeLayout>

آلفا عددی بین صفر و یک که نشونن میده عکس چقد معلوم باشه یک معلوم صفر نامرئی

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

زمان میلی ثانیه

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

فایل grid.xml

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


    <View
        android:id="@+id/view3"
        android:layout_columnSpan="2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:layout_row="0"
        android:background="@color/chamani"
        android:layout_column="0" />

    <View
        android:id="@+id/view4"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_row="1"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:background="@android:color/holo_orange_dark"
        android:layout_column="0" />

    <View
        android:id="@+id/view5"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_row="1"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:background="#00BCD4"
        android:layout_column="1" />
</GridLayout>

حاصل عکس حاصل ۲

البته برا من که تو ایمولاتور نیمدش- فقط تو همون صفحه پیش نمایش خودش اومد

ظاهرا این مشکل مردم دیگه هم بوده باید به جای GridLayout خالی بنویسی android.support.v7.widget.GridLayout و یکی دو تا چیز تو کامپایلر تغییر بدی که به دردسرش نمی ارزه اصلا من چرا خودمو گیر این چیز بیخود انداختم سه ساعته؟!

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ فروردين ۹۹ ، ۲۱:۵۱
Put Yourself First
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        SubMenu subb=menu.addSubMenu("Gallery");
        subb.add("Photos").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
                return false;
            }
        });
        subb.add("Films");
        SubMenu askus=menu.addSubMenu("Ask us");
        askus.add("Call").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("tel:09123456789"));
                startActivity(intent);
                return false;
            }
        });

وقتی میخوای تو اصلیا باشه می زنیMenuItem name=menu.add("string")

وقتی بخوای خودش یه زیرمنو باشه مثل بالا می زنی دیگه

نتیجه: عکس حاصل ۱

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ فروردين ۹۹ ، ۲۰:۳۲
Put Yourself First
package ir.ben.hassan;

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

import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Date;
import java.util.Random;

public  class MainActivity extends AppCompatActivity {
    public static final int reqcod=24;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final FormInfo form=new FormInfo(this,R.id.forminfo);
        form.getBtsub().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name=form.getInputname().getText().toString().trim();
                String phone=form.getInputphone().getText().toString().trim();
                String email=form.getInputemail().getText().toString().trim();

                if(form.isvalidinput(name,phone,email))
                {
                    Intent intent= new Intent(MainActivity.this,two.class);
                    intent.putExtra("name",name);
                    intent.putExtra("email",email);
                    if(form.getCbshare().isChecked())
                    intent.putExtra("phone",phone);
                    startActivityForResult(intent,reqcod);

                }
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==reqcod)
        {
            if(resultCode==RESULT_OK)
            {
                Toast.makeText(this, "messge", Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        menu.add("Open Browser").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://blog.ir"));
                startActivity(intent);
                return false;
            }
        });

        menu.add("Send sms").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("sms:09123456789"));
                intent.putExtra("sms_body","Hiiiii");
                startActivity(intent);
                return false;
            }
        });

        menu.add("Call").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("tel:09123456789"));
                startActivity(intent);
                return false;
            }
        });


        return super.onCreateOptionsMenu(menu);
    }
}

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

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

<uses-permission android:name="android.permission.SEND_SMS">
</uses-permission>
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ فروردين ۹۹ ، ۱۱:۵۱
Put Yourself First

two.java:

package ir.ben.hassan;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.DragStartHelper;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class two extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        TextView tv= findViewById(R.id.tv2);//alt+2enter to cast

        Toast.makeText(this, "hey", Toast.LENGTH_SHORT).show();

        Bundle extras=getIntent().getExtras();
        if(extras!=null)
        {
            Toast.makeText(this, "extra", Toast.LENGTH_SHORT).show();

            String email="";
            String phone="";
            String name="";
            if(extras.containsKey("email"))
                email=extras.getString("email");
            if(extras.containsKey("phone")){
            phone=extras.getString("phone");
            }
            if(extras.containsKey("name"))
                name=extras.getString("name");

            tv.setText("name: "+name+"\n");
            tv.append("email: "+email+"\n");
            tv.append("phone: "+phone+"\n");
        }
        else
            Toast.makeText(this, "no extra", Toast.LENGTH_SHORT).show();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       MenuItem itemok= menu.add("Confirm");
       itemok.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
       itemok.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
           @Override
           public boolean onMenuItemClick(MenuItem item) {
               Intent intent=new Intent();//////just inverse of the other intent 
               intent.putExtra("messge","yoohoooo");
               setResult(RESULT_OK,intent);
               //or instead of the red lines could be just: setResult(RESULT_OK); no need to make intent
               finish();//finishes this activity which is no longer needed
               return false;
           }
       });
        return super.onCreateOptionsMenu(menu);
    }
}

کلیک راست->generate getter 

formifo.java

package ir.ben.hassan;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class FormInfo implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
    private Activity activity;
    private LinearLayout forminfo;
    private Context context;
    private EditText inputname;
    private EditText inputphone;
    private EditText inputemail;
    private CheckBox cbshare;
    private Button btsub;


    public FormInfo(Activity activity,int layoutId) {
        this.activity=activity;
        forminfo=activity.findViewById(layoutId);//here the instructor did a cast (LinearLayout)
        this.activity=activity;
        init();
    }

    private void init() {
        if(forminfo==null)
            return;
        inputname=forminfo.findViewById(R.id.inputname);//here the instructor did a cast (EditText)
        inputphone=forminfo.findViewById(R.id.inputphone);
        inputemail=forminfo.findViewById(R.id.inputemail);
        cbshare=forminfo.findViewById(R.id.cbshare);
        btsub=forminfo.findViewById(R.id.btsub);
        btsub.setOnClickListener(this);
        cbshare.setOnCheckedChangeListener(this);

    }
//این یاسی ها با گتر ساخته شدن
    public EditText getInputname() {
        return inputname;
    }

    public EditText getInputphone() {
        return inputphone;
    }

    public EditText getInputemail() {
        return inputemail;
    }

    public CheckBox getCbshare() {
        return cbshare;
    }

    public Button getBtsub() {
        return btsub;
    }

    @Override
    public void onClick(View v) {
            if(v.getId()==btsub.getId())
            {
                String email=inputemail.getText().toString().trim();
                String phone=inputphone.getText().toString().trim();
                String name=inputname.getText().toString().trim();
                if(isvalidinput(name,phone,email))
                {
                    Toast.makeText(activity, "Valid Input", Toast.LENGTH_SHORT).show();

                    Intent intent=new Intent(activity,two.class);
                    intent.putExtra("name",name);
                    intent.putExtra("email",email);
                    if(cbshare.isChecked())
                        intent.putExtra("phone",phone);
                    activity.startActivity(intent);

                }

            }
    }
//این قبلا پرایوت بود به خاطر گترها پابلیک شد
    public boolean isvalidinput(String name,String phone,String email) {
        if(name==null)
            name=inputname.getText().toString().trim();
        if(email==null)
            email=inputemail.getText().toString().trim();
        if(phone==null)
            phone=inputphone.getText().toString().trim();

        if (name.length() < 3) {
            Toast.makeText(activity, "Name should be at least 3 characters", Toast.LENGTH_SHORT).show();
            inputname.requestFocus();
            return false;
        }
        if (cbshare.isChecked() && !phone.isEmpty() && (phone.length() != 11 || !phone.startsWith("09"))) {
            Toast.makeText(activity, "Wrong mobile number", Toast.LENGTH_SHORT).show();
            inputphone.requestFocus();
            return false;
        }
        if (!email.contains("@") || (email.lastIndexOf('.') < email.indexOf('@')) || email.split("@").length>2)
        {
            Toast.makeText(activity, "Wrong email address", Toast.LENGTH_SHORT).show();
            inputemail.requestFocus();
            return false;
        }

        return true;
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(buttonView.getId()==cbshare.getId())
        {
            inputphone.setEnabled(isChecked);
        }
    }
}

main activity java

package ir.ben.hassan;

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

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Date;
import java.util.Random;

public  class MainActivity extends AppCompatActivity {
    public static final int reqcod=24;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final FormInfo form=new FormInfo(this,R.id.forminfo);
        form.getBtsub().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name=form.getInputname().getText().toString().trim();
                String phone=form.getInputphone().getText().toString().trim();
                String email=form.getInputemail().getText().toString().trim();

                if(form.isvalidinput(name,phone,email))
                {
                    Intent intent= new Intent(MainActivity.this,two.class);
                    intent.putExtra("name",name);
                    intent.putExtra("email",email);
                    if(form.getCbshare().isChecked())
                    intent.putExtra("phone",phone);
                    startActivityForResult(intent,reqcod);

                }
            }
        });
//        form.getInputname().setTextColor(0xFFFF7002);
     //  form.getInputname().setTextColor(Color.argb(200,5240,67,4));
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==reqcod)
        {
            if(resultCode==RESULT_OK)
            {
                Toast.makeText(this, data.getStringExtra("messge"), Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

     getMenuInflater().inflate(R.menu.menu_main,menu);
        return super.onCreateOptionsMenu(menu);
    }

    }
}

باگ برا من اگه شماره تلفن وارد نکنه ولی زده باشه share اپ بسته میشه  اگه اون دستور null ها رو بذارم درست میشه؟

نع نشد

دلیلش این بوده:

if(extras.containsKey("phone")){
phone=extras.getString("phone").substring(2);

کد استاد اون substring رو برداشته بوده

 

میان بر: وقتی new می نویسی کنترل اسپس بزن . (منو پیدا کن من یه میان بر هستم که توش اینتر  و alt enter نداره!)

new ctrl space

itemok.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

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