بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

خطا در تعریف لیست ویو داخل اکتیویتی فرگمنت!

مدیریت گفتگو
احسان منصوری 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام. وقت بخیر

من از Fragment آماده اندروید استودیو استفاده کردم توی پروژم. همه چیش خوب کار میکنه و اکتیویتی ها به درستی نمایش داده میشن ولی توی یکی از اکتیویتی ها که میخوام لیست ویو بذارم، خطای زیر رو نمایش میده:

این هم کد اکتیویتی:

 public class ActivityHome extends android.support.v4.app.Fragment {
    public static ArrayList<StructOnlineData> data = new ArrayList<StructOnlineData>();

    private ArrayAdapter adapter;
    public ListView lstNews;
    View rootview;



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
       rootview = inflater.inflate(R.layout.activity_home,
                container, false);

        return rootview;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        lstNews = (ListView) rootview.findViewById(R.id.lstNews);
        adapter = new AdapterData(data);
        lstNews.setAdapter(adapter);  //از این خط خطا میگیره

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    readData();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();


    }

 

 ممنون میشم اگه کمک کنید

نظرات

Spirit 11 سال پیش
چرخه حیات Fragment رو یکبار بررسی کنید، متد onCreate قبل از onCreateView اجرا میشه، پس ...
احسان منصوری 11 سال پیش
پس؟ والا نمیدونم چجوریه هرچی کدها رو جابجا میکنم، اینو تو اون تعریف میکنم فایده نداره. اصلا قانون تعریف لیست ویو توی فرگمنت چیه؟ من از این پروژه آماده استفاده کردم. لینک اگه مقدوره، نگاهی بش بنداز شاید فرجی شد.
احسان منصوری 11 سال پیش
آقا کسی پیدا نشد این پروژه رو تست کنه؟ نکته عجیبش اینجاس که توی منابع فارسی هیچی در موردش نیست هیچ، منابع انگلیسی هم چیزای خیلی کمی در مورد تعریف لیست ویو داخل اکتیویتی فرگمنت توضیح دادن
Spirit 11 سال پیش
یه چیزی گفتم ولی پیگیری نکردید، View اصلی شما توی onCreateView ساخته میشه، حالا این متد بعد از onCreate اجرا میشه، ولی شما توی onCreate به ListView که هنوز در دسترسی نیست یعنی null هست دارید Adapter تنظیم میکنید.
احسان منصوری 11 سال پیش
خب وقتی کدهای onCreate رو داخل onCreateView قرار میدم بازم کرش میکنه. بعدش، همین کدها رو داخل onActivityCreated هم قرار میدم کرش میکنه
Spirit 11 سال پیش
با توجه به کدهایی که گذاشتید مشکلی که گفتم دیده میشد، الان باز مشکل اگه null بودن باشه، حتما ListView تو اون لایه ای که inflate کردین نیست، اینجا نوشتید activity_home ، بررسی کنید.

پاسخ‌ها 4

احسان منصوری 11 سال پیش

خطاش شد RuntimeExeption!

من لیست ویو رو درست تعریف کردم. آی دیش هم درسته ولی از لیست ویو خطا میگیره

نظرات

Spirit 11 سال پیش
این خطا هم زمانی میاد که از ListFragment استفاده شده باشه، و آیدی ListView مطابق با چیزی که بالا نوشته، نباشه.
احسان منصوری 11 سال پیش
ممنون Spirit عزیز. آی دی رو تغییر دادم دیگه ارور نمیگیره ولی نمیدونم چرا آیتم ها رو نشون نمیده. آیا Adapter لیست ویو هم نیاز به تغییر داره برای نمایش توی فرگمنت؟
Spirit 11 سال پیش
:) ، خیر فرقی نداره، ممکنه متد readDate درست عمل نکنه، با استفاده از Log و غیره مراحل رو بررسی کنید که صحیح انجام میشن یا نه.
احسان منصوری 11 سال پیش
نه متد readData درست کار میکنه و اطلاعات رو دریافت میکنه
مجتبی یگانه 11 سال پیش
اسپریت کاملا دست راهنماییت کرده و فقط باید در جای درست محتوای رو initialize کنی ، تو این متد هم مقدار ها رو تو آداپتورت بزاری و ناتیفای اش کنی ! ، پس مشکلی نباید باشه !
احسان منصوری 11 سال پیش

هنگام اجرا، این اطلاعات رو نشون میده:

چند خط اول رو از متد readData لوگ گرفتم.

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

 

آخرین سورسی که نوشتم اینه: (البته این کدها رو علاوه بر onCreateView، داخل onActivityCreated و onCreate هم نوشتم ولی خطاها یکسان بود). سورس adapterم هم مثل بقیه لیست ویو هاس. اگه نیاز بود تا سورس اونم بذارم

جاهایی که اون لینک آبی ها روش خطا میگیره رو هم مشخص کردم

 public class ActivityHome extends ListFragment {  //لینک آبی دوم
    public static ArrayList<StructOnlineData> data = new ArrayList<StructOnlineData>();

    private ArrayAdapter adapter;
    public ListView lstNews;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View  rootview = inflater.inflate(R.layout.activity_home,
                container, false);
        lstNews = (ListView)rootview.findViewById(android.R.id.list);
        adapter = new AdapterData(data);
        lstNews.setAdapter(adapter);

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    readData();  //لینک آبی سوم
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
        return rootview;
    }

    private void readData() {
        // String newsUnicode = null;
        String newsConverted;

        //Read URL For Receive Json Code
        String result = Webservice.readUrl(url);
        if (result != null) {
            try {
                G.data.clear();
                JSONArray jsonnews = new JSONArray(result);
                for (int i = 0; i < jsonnews.length(); i++) {
                    JSONObject object = jsonnews.getJSONObject(i);
                    StructOnlineData news = new StructOnlineData();
                    String newsUnicode = object.getString("n_dec");
                    //Call "decode" Function
                    newsConverted = decode(newsUnicode);

                    news.newsTitr = object.getString("n_title");
                    news.newsSummary = newsConverted;
                    news.newsUrl = object.getString("n_link");
                    Log.i("LOG", "url: " + news.newsUrl);
                    news.newsDate = object.getString("n_shodate");
                    news.newsResource = "تابناک";
                    news.newsPositiveRate = object.getString("n_up");
                    news.newsNegativeRate = object.getString("n_down");

                    G.data.add(news);

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        adapter.notifyDataSetChanged(); //لینک آبی اول
    }

نظرات

احسان منصوری 11 سال پیش
دوستان تا حالا کسی به این مشکل بر نخورده توی فرگمنت؟ رسما سرویسم کرده:)
Spirit 11 سال پیش
از این پس در مواجهه با چنین مشکلاتی چند بار کدها رو فقط مرور کنید، مثلاً ببینید متغیر ها و متد ها در جای خودشون هستن، اما الان ببینید شما اطلاعات رو به کدوم آرایه میدین، Adapter هم از کجا تغذیه میکنه!
احسان منصوری 11 سال پیش
ببین اسپیریت جان؛ من قبل از اینکه از فرگمنت ها استفاده کنم، با لیست ویوی داخل اکتیویتی (همون چیزی که توی آموزش ها هست) تست کردم و بدون مشکل کار کرد. اتفاقا اون سورس رو هم دارم و همین الان هم تستش کردم. حالا همون کدها رو آوردم داخل فرگمنت.
احسان منصوری 11 سال پیش
ببخشید یه سوال: توی لوگ بالا، اون 25 تا system error مربوط به چی هستن و چجوری میشه برطرفشون کرد؟ یکیش که من خوندم مربوط میشد به کنسل کردن ترد.
hosseinAmini 11 سال پیش

من از لیست ویو توی Fragment تو پروژه قبلیم استفاده کردم مشکلی هم نداشت. 
یه نگاه که به کدتون انداختم دیدم کد زیر رو کم داره:(قبل از onCreateView قرار بدید، ببینید درست میشه)

 public ActivityHome() {}

نظرات

احسان منصوری 11 سال پیش
فرقی نمیکنه حسین جان همون اطلاعات تاپیک بالایی رو نشون میده. حالا یه نگاهی میتونی به پروژه خودت بندازی ببینی مال من چ فرقی با اون میکنه؟
alimatin 11 سال پیش
آقا احسان منم دقیقا همین مشکل شمارو داشتم که الان با کمک گرفتن از کدهای شما به نتیجه رسیدم... این مشکل خیلی ذهنمو درگیر کرده بود ولی الان خیلی خوشحالم دوست عزیز ... تشکر :)
علی 11 سال پیش
آقا احسان تو این Navigation که شما داری دکمه بک در اکشن بار برای فرگمنتها و یا اکتیویتی ها تعریف کردید؟ من می خوام تعریف کنم ولی نمیدونم چطوریه.
احسان منصوری 11 سال پیش
من این Navigation رو خودم ننوشتم. از آموزش سایت AndroidHive استفاده کردم. یادم نیست که دکمه Back داشت یا نه متاسفانه. چون که اینقد منو اذیت کرد که کلا بیخیال فرگمنت شدم:)
سجاد تاج‌الدین 11 سال پیش

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

نظرات


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