رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

سوال درمورد پاپ آپ پیج وریسایکلر ویو


پست های پیشنهاد شده

سلام خسته نباشید 

میخوام ی ریسایکلر ویو بسازم که مثل این عکس آیکون هرکدومش متفاوتش باشه یعنی هر چندتاییش متفاوت باشن با هم چیکار کنم؟

erdu_diffrent_recycler_view.jpg

و دوم اینکه میخوام یه صفحه پاپ آپ بسازم مثل این عکس...برای این کار چیکار کنم؟!

 

http://uupload.ir/files/yup_popup_page.jpg

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در ۱ ساعت قبل، hamidreza.kh گفته است :

سلام خسته نباشید 

میخوام ی ریسایکلر ویو بسازم که مثل این عکس آیکون هرکدومش متفاوتش باشه یعنی هر چندتاییش متفاوت باشن با هم چیکار کنم؟

erdu_diffrent_recycler_view.jpg

و دوم اینکه میخوام یه صفحه پاپ آپ بسازم مثل این عکس...برای این کار چیکار کنم؟!

 

http://uupload.ir/files/yup_popup_page.jpg

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

 

 

از کلاس PopupWindow برای ساخت پاپ آپ استفاده کن مانند کد زیر



    private void initiateTranslationPopupWindow(View v) {
        try {
            //We need to get the instance of the LayoutInflater, use the context of this activity
            LayoutInflater inflater = (LayoutInflater) getActivity()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            //Inflate the view from a predefined XML layout
            View layout = inflater.inflate(R.layout.fragment_translation,
                    (ViewGroup) v.findViewById(R.id.popup_element));
            // create a MATCH_PARENT width and MATCH_PARENT height PopupWindow
            pw = new PopupWindow(layout, LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT, true);
            txt_cancel = (TextView) layout.findViewById(R.id.txt_cancel);
        
            // display the popup in the center
            pw.showAtLocation(v, Gravity.CENTER, 0, 0);




        } catch (Exception e) {
            e.printStackTrace();
        }
    }



 

 

 

 

 

 

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 17 دقیقه قبل، Farzad Sarseifi گفته است :

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

 

 

از کلاس PopupWindow برای ساخت پاپ آپ استفاده کن مانند کد زیر




    private void initiateTranslationPopupWindow(View v) {
        try {
            //We need to get the instance of the LayoutInflater, use the context of this activity
            LayoutInflater inflater = (LayoutInflater) getActivity()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            //Inflate the view from a predefined XML layout
            View layout = inflater.inflate(R.layout.fragment_translation,
                    (ViewGroup) v.findViewById(R.id.popup_element));
            // create a MATCH_PARENT width and MATCH_PARENT height PopupWindow
            pw = new PopupWindow(layout, LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT, true);
            txt_cancel = (TextView) layout.findViewById(R.id.txt_cancel);
        
            // display the popup in the center
            pw.showAtLocation(v, Gravity.CENTER, 0, 0);




        } catch (Exception e) {
            e.printStackTrace();
        }
    }



 

 

 

 

 

 

 

 

خیلی ممنون

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 1 ساعت قبل، hamidreza.kh گفته است :

خیلی ممنون

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

 

چرا میخواهید برای هر آیتم یک holder جدا تعریف کنید؟؟ وظایف هر ایتم چی هستش؟

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 9 دقیقه قبل، Farzad Sarseifi گفته است :

 

چرا میخواهید برای هر آیتم یک holder جدا تعریف کنید؟؟ وظایف هر ایتم چی هستش؟

 

هیچ وظایف خاصی ندارن همشون یه کار رو انجام میدن اونم نشون دادن یه عکس ک کلیک روش بشه میره به اکتیویتی بعدی فقط میخوام این تصویرا فرق کنه

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 9 دقیقه قبل، hamidreza.kh گفته است :

هیچ وظایف خاصی ندارن همشون یه کار رو انجام میدن اونم نشون دادن یه عکس ک کلیک روش بشه میره به اکتیویتی بعدی فقط میخوام این تصویرا فرق کنه

 

 

پس همینکار رو انجام بدید یک  RecyclerView و اداپترش رو بنویسید

  <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

 

آداپتر RecyclerView

public class TestAdapter extends RecyclerView.Adapter<JuzeAdapter.ViewHolder> {


    List<Model> modelList = new ArrayList<>();

    public JuzeAdapter(Context context, List<Model> data) {
        modelList = data;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.test_row, null);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

		Model model=modelList.get(position);

        holder.txt_title.setText(model.getTitle()+"");
        holder.txt_id.setText(model.getId()+"");

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView txt_title,txt_id;

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

            txt_title = (TextView) itemView.findViewById(R.id.txt_title);
            txt_id = (TextView) itemView.findViewById(R.id.txt_id);

        }
    }

}

اینترفیس کلیک RecyclerView

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView;

/**
 * Created by Farzad sarseify on 11/18/2015.
 */
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
    private OnItemClickListener mListener;
    private OnItemLongClickListener mLongListener;

    public interface OnItemClickListener {
        public void onItemClick(View view, int position);
    }

    public interface OnItemLongClickListener {
        public void onItemClick(View view, int position);
    }



    GestureDetector mGestureDetector;

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }


    public RecyclerItemClickListener(Context context, OnItemLongClickListener listener) {
        mLongListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }



    @Override
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
        View childView = view.findChildViewUnder(e.getX(), e.getY());
        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
            mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}

 

رویداد کلیک RecyclerView

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.addOnItemTouchListener(
                new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        // TODO Handle item click


                        String txt_id=((TextView)view.findViewById(R.id.txt_id)).getText().toString();


                         Intent intent=new Intent(getActivity(), CustomActivity.class);
                        
                        intent.putExtra("id",txt_id);

                        startActivity(intent);


                    }
                })
        );

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 3 دقیقه قبل، Farzad Sarseifi گفته است :

 

پس همینکار رو انجام بدید یک  RecyclerView و اداپترش رو بنویسید


  <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

 

آداپتر RecyclerView


public class TestAdapter extends RecyclerView.Adapter<JuzeAdapter.ViewHolder> {


    List<Model> modelList = new ArrayList<>();

    public JuzeAdapter(Context context, List<Model> data) {
        modelList = data;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.test_row, null);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

		Model model=modelList.get(position);

        holder.txt_title.setText(model.getTitle()+"");
        holder.txt_id.setText(model.getId()+"");

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView txt_title,txt_id;

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

            txt_title = (TextView) itemView.findViewById(R.id.txt_title);
            txt_id = (TextView) itemView.findViewById(R.id.txt_id);

        }
    }

}

اینترفیس کلیک RecyclerView


import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView;

/**
 * Created by Farzad sarseify on 11/18/2015.
 */
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
    private OnItemClickListener mListener;
    private OnItemLongClickListener mLongListener;

    public interface OnItemClickListener {
        public void onItemClick(View view, int position);
    }

    public interface OnItemLongClickListener {
        public void onItemClick(View view, int position);
    }



    GestureDetector mGestureDetector;

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }


    public RecyclerItemClickListener(Context context, OnItemLongClickListener listener) {
        mLongListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }



    @Override
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
        View childView = view.findChildViewUnder(e.getX(), e.getY());
        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
            mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}

 

رویداد کلیک RecyclerView


RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.addOnItemTouchListener(
                new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        // TODO Handle item click


                        String txt_id=((TextView)view.findViewById(R.id.txt_id)).getText().toString();


                         Intent intent=new Intent(getActivity(), CustomActivity.class);
                        
                        intent.putExtra("id",txt_id);

                        startActivity(intent);


                    }
                })
        );

 

بسیار بسیار سپاسگذارم ، پس این کار منطقی تره تا ست کردن عکس توی دیتابیس واسه هرکدوم؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 18 دقیقه قبل، hamidreza.kh گفته است :

بسیار بسیار سپاسگذارم ، پس این کار منطقی تره تا ست کردن عکس توی دیتابیس واسه هرکدوم؟

عکساتون رو تو فولدر res/mipmap بزارید و اسمش رو تو دیتابیس sqlite ذخیره کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • مطالب مشابه

    • توسط scientific
      سلام وقت بخیر
      سلام من دو تا ریسایکلرویو تعریف کردم که هر کدوم آیتمهای مخصوص خودشون رو دارن ، و از یک لیوت نمونه و از یک آداپتر برای هر دو استفاده کردم،
      حالا برای رویداد کلیک آیتم ها به مشکل بر خوردم
      چون طبیعتا پوزیشن آیتم ها در هر دو ریسایکلرویو یکسان هست؛ مثلا پوزیشن آیتم اول ، در هردو ریسایکلرویو صفر هست و وقتی میگم اگر روی آیتم صفر کلیک شد برو به اکتیویتی دوم
      برای هر دو ریسایکلرویو همین اتفاق میفته؛ 
      ((یعنی وقتی روی اولین آیتم در ریسایکلرویوی اولم کلیک میکنم میره به اکتیویتی دو و‌ وقتی روی اولین آیتم از ریسایکلرویوی دوم هم کلیک میکنم بازم میره به اکتیویتی دو))
      راهنماییم کنید ممنون میشم
       
      کلاس آداپتر:
      package com.donyaeayandeh.itroducingdonyaeayandehinstitute; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class AdapterRecyclerView extends RecyclerView.Adapter<CourseEducationViewHolder> { List<CourseModel> list; public AdapterRecyclerView(List<CourseModel> courseModelslist) { this.list = courseModelslist; } @NonNull @Override public CourseEducationViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.course_education_list_item,parent,false); return new CourseEducationViewHolder(view); } @Override public void onBindViewHolder(@NonNull final CourseEducationViewHolder holder, final int position) { // fill items from List: holder.course_education_image.setImageResource(list.get(position).getCuorse_education_icon()); holder.course_education_txt.setText(list.get(position).getCourse_education_title()); // Click recyclerView Items: holder.itemView.setOnClickListener(new View.OnClickListener() { Intent intent; @Override public void onClick(View view) { Toast.makeText(view.getContext(),"The Item Clicked is: " +holder.getLayoutPosition(),Toast.LENGTH_SHORT).show(); if(position==0){ intent=new Intent(view.getContext(),Cheshmandaz_Dore_Info.class); view.getContext().startActivity(intent); } } }); } @Override public int getItemCount() { return list.size(); } } ممنون میشم جواب بدید
       
    • توسط scientific
      سلام ، 
      من وقتی در MainActivity یه آبجکت از کلاس مدلم می سازم و داده هام رو به پارامترهای constructor اش می فرستم تا در کلاس مدل ذخیره بشه ،
      و هم زمان اون اطلاعات رو داخل یک لیست از کلاس مدل هم ذخیره می کنم، برنامه م به محض اجرا بسته میشه
      مگر این که کد مربوط به این کار رو کامنت کنم:
      courseModelList.add(new CourseModel(image,s)); یا این که باید کد مربوط به "ست شدن آداپتر به ریسایکلرویو" رو کامنت کنم تا برنامه اجرا بشه:
      recyclerView_course_main.setAdapter(adapterRecyclerView); --------------------------------------------------------------------------------------------------------------------------
      هرکار می کنم ریسایکلرویو رو توی برنامه م نمیتونم نشون بدم
      بریک پوینت هم گذاشتم و لاگ کت رو چک کردم ولی بازم نتونستم ایرادش رو برطرف کنم

      عکسهایی از کد ها و اجرای خط به خط رو میزارم اگه راهنمایی کنید ممنون میشم:
      1-  کلاس MainActivity  متد مربوط به پر کردن لیست آرایه و ست کردن آداپتر:
      private void setupRecyclerView() { courseModelList.add(new CourseModel(image,s)); courseModelList.add(new CourseModel(image,s)); recyclerView_course_main = findViewById(R.id.recyclerView_coursemain); adapterRecyclerView = new AdapterRecyclerView(courseModelList); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerView_course_main.setLayoutManager(linearLayoutManager); recyclerView_course_main.setAdapter(adapterRecyclerView); } 2- کلاس آداپتر:
      3- کلاس مدل:
      public class CourseModel { private int cuorse_education_icon; private String course_education_title; public CourseModel(int cuorse_education_icon, String course_education_title) { this.cuorse_education_icon = cuorse_education_icon; this.course_education_title = course_education_title; } public int getCuorse_education_icon() { return cuorse_education_icon; } public String getCourse_education_title() { return course_education_title; } 4- کلاس ViewHolder
      import android.view.View; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.donyaeayandeh.itroducingdonyaeayandehinstitute.R; import de.hdodenhof.circleimageview.CircleImageView; public class CourseEducationViewHolder extends RecyclerView.ViewHolder { public CircleImageView course_education_image; public TextView course_education_txt; public CourseEducationViewHolder(@NonNull View itemView) { super(itemView); course_education_image = itemView.findViewById(R.id.course_education_icon); course_education_txt= itemView.findViewById(R.id.course_education_txt); } }  

    • توسط sobhan
      سلام
      من واسه فیلتربندی کتاب هام و دسته بندی کتاب هام از 2تا ریسایکلرویوو استفاده کردم یعنی یکی برای دسته ها و یکی هم برای خود کتاب ها
      و واسه اینکه روی هرکدوم از دسته بندی ها که کلیک شد کتاب های اون دسته رو نشون بده از Broadcast استفاده کردم یعنی مقدار رو از آداپتر دسته بندی ها میگیرم و میارم توی آداپتر کتاب ها
      و بعد از اینکه یه دسته رو انتخاب کرد اون ایتم هایی رو که جزو اون دسته هستند visible و بقیه gone شند
      حالا مشکل من اینجاست که وقتی توی یک دسته بندی هستم و چندتا کتاب رو اضافه میکنم، وقتی میرم توی یه دسته بندی دیگه و دوباره برمیگردم توی دسته بندی قبلی، تعدادش رو صفر نشون میده ☹️
      البته وقتی میزنم مشاهده سبدخرید (یعنی مرحله بعد)، همه چیز درسته یعنی کتاب ها و تعدادشون درست نشون میده
      این رو هم اضافه کنم که دیتاهارو از وبسرویس میگیرم و میریزم توی دیتابیس اپ و بعد از دیتابیس توی ریسایکلرویوو نمایشش میدم
      واسه هرکدوم از کتاب هایی که تعدادشون رو هم زیاد و کم میکنم توی دیتابیسم ذخیره میشه
      میشه راهش رو بهم بگین☹️
    • توسط MaHdI-09
      سلام.من یک ریسایکلرویو دارم که میخوام وقتی دیتا توش اضافه کردم.بره به آخرین position  ریسایکلرویو.

      لطفا درصورت پاسخ بفرمایید در کدام کلاس باید کد ها رو بنویسم.

      با سپاس فراوان
    • توسط Omid Zakeri
      بعضی از دوستان برای انجام onLongClick و onClick در recyclerView دچار مشکل میشن.قصد من در این آموزش انجام این اعمال در recyclerView  هستش.
      برای این کار ابتدا باید یک کلاس جداگانه بنویسیم به صورت زیر:
      public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { private OnItemClickListener mListener; private OnItemLongClickListener mLongListener; public interface OnItemClickListener { public void onItemClick(View view, int position); } public interface OnItemLongClickListener { public void onItemClick(View view, int position); } GestureDetector mGestureDetector; public RecyclerItemClickListener(Context context, OnItemClickListener listener) { mListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } }); } public RecyclerItemClickListener(Context context, OnItemLongClickListener listener) { mLongListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { View childView = view.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); } return false; } @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } }  
       
      بعد از اضافه کردن کلاس بالا حالا باید ازش استفاده کنیم به صورت زیر :
       
      متد onLongClick:
      recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), attachFileRecyclerView, new RecyclerTouchListener.ClickListener() { @Override public void onClick(View view, int position) { } @Override public void onLongClick(View view, final int position) { . . . } }));  
       
      متد onClick:
      recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { . . . } }));  
  • فایل

×
×
  • اضافه کردن...