آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

mohammadkhani  10 سال پیش  10 سال پیش
0 -1

سلام

من پروژه google play آقای کاشی زاده ادامه دادم در بخش سه فیلم آموزشی از item در فرگمن استفاده نکردم از لیست ویو به همون شکلی استاد یاد داده استفاده کردم حالا می خوام با کلیک کردن بروی یکی از اون item های لیست ویو به Activiy مورد نظرم برم.

مشکل این جاست که که اگر در تابع fill کلاس adpter کد مربوطه بنویسم احتیاج دارم به تابع getActiviy() که چون کلاس adpter از کلاس fragment اکستنز نشده این تابع وجود نداره اگر در تابع onActivityCreated() خود fragment استفاده کنم برنامه کرش می کنه.

من هم می خوام از فرگمت به اکتیوتی برم و بعض از  جاها از فرگمت به فرگمت.

public class AdapterPost extends ArrayAdapter<StrcutPost> {

    public AdapterPost(ArrayList<StrcutPost> array) {
        super(G.context, R.layout.item_post, array);
    }


    private static class ViewHolder {

        public ViewGroup layPost;
        public TextView  txtTitlePost;
        public TextView  txtTextPost;
        public TextView  txtAuthorPost;
        public TextView  txtDatePublished;
        public ImageView imgPost;


        public ViewHolder(View view) {
            layPost = (ViewGroup) view.findViewById(R.id.layPost);
            txtTitlePost = (TextView) view.findViewById(R.id.txtTitlePost);
            txtTextPost = (TextView) view.findViewById(R.id.txtTextPost);
            txtAuthorPost = (TextView) view.findViewById(R.id.txtAuthorPost);
            txtDatePublished = (TextView) view.findViewById(R.id.txtDatePublished);
            imgPost = (ImageView) view.findViewById(R.id.imgPost);
        }


        public void fill(final ArrayAdapter<StrcutPost> adapter, final StrcutPost item, final int position)
        {

            txtTitlePost.setText(item.titlePost);
            txtTextPost.setText(item.textPost);
            txtAuthorPost.setText(item.authorPost);

            /* آیا این جا باید بنویسم؟چه کدی بنویسم*/

        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        StrcutPost item = getItem(position);
        if (convertView == null) {
            convertView = G.inflater.inflate(R.layout.item_post, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.fill(this, item, position);
        return convertView;
    }
}

 

public class FragmentHome extends Fragment {

    public ArrayAdapter adapter;

    private ViewGroup   layout;


    public static Fragment instance()
    {
        Fragment fragment = new FragmentHome();
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        layout = (ViewGroup) G.inflater.inflate(R.layout.frm_fragment_home, null);
        return layout;
    }


    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        ListView lstPost = (ListView) layout.findViewById(R.id.lstPost);

        adapter = new AdapterPost(G.posts);
        lstPost.setAdapter(adapter);

        for (int i = 0; i < 10; i++)
        {
            StrcutPost post = new StrcutPost();

            post.titlePost = "Title " + i;
            post.textPost = "Text " + i;
            post.authorPost = "author " + i;
            G.posts.add(post);

        }
        adapter.notifyDataSetChanged();
       
        /* آیا این جا باید بنویسم؟چه کدی بنویسم*/

    }
}

 

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
Criss  10 سال پیش
+1 0

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

 Intent intent = new Intent(G.context, ActivityNews.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.context.startActivity(intent);

 

پاسخ به سوال 
mohammadkhani  10 سال پیش
0 -1

ممنون از جوابتون

لایه مورد نظر که باید روش کلیک بشه تا اکتیوتی نشون داده بشه در کلاس AdapterPost اسمش layPost که بصورت یک فیلد public static تعریفش کردم و در کلاس FragmentHome اینو به آخرش اضافه کردم

AdapterPost.layPost.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent(G.context, ActivityPost.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                G.context.startActivity(intent);

            }
        });

اما برنامه کرش کرد در داخل logcat از خط AdapterPost.layPost.setOnClickListener(new OnClickListener() { ایراد میگیره ایرادش nullpointerException هست

layPost به حلت قبلش برگردونم  و در کلاس adpter در متد fill  اینو اضافه کردم


            layPost.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    Intent intent = new Intent(G.context, ActivityPost.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    G.context.startActivity(intent);

                }
            });

اما وقتی روی لایه کلیک می کنم کرش می کنه در داخل logcat از خط G.context.startActivity(intent); ایراد میگیره

+1 0
فک کنم اگه جای context از activity استفاده کنید مشکلتون حل شه. توی کلاس G یک activity استاتیک تعریف کنید. بعد داخل کلاسی که fragment روی اون داره اجرا میشه مقدار activity = this قرار دهید. (10 سال پیش)
پاسخ به سوال 
mohammadkhani  10 سال پیش
0 0

سلام

متاسفانه کرش می کنه

 من سورس پروژه می ذارم تا بیشتر در جریان باشید همون google play که آقای کاشی زاده است  فقط یک list View داره می خوام روی هر کدوم از آیتم ها کلیک بشه از fragmentHome به َ ActivityPost بره من فکر کنم جواب این سوال خیلی کاربرد داشته باشه مخصوصا وقتی که بخواهیم از fragmentHome به یک fragment دیگه بریم

 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .