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

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

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

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

من از 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();


    }

 

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

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

خطاش شد RuntimeExeption!

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

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

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

چند خط اول رو از متد 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(); //لینک آبی اول
    }
0 0
دوستان تا حالا کسی به این مشکل بر نخورده توی فرگمنت؟ رسما سرویسم کرده:) (11 سال پیش)
0 0
از این پس در مواجهه با چنین مشکلاتی چند بار کدها رو فقط مرور کنید، مثلاً ببینید متغیر ها و متد ها در جای خودشون هستن، اما الان ببینید شما اطلاعات رو به کدوم آرایه میدین، Adapter هم از کجا تغذیه میکنه! (11 سال پیش)
0 0
ببین اسپیریت جان؛ من قبل از اینکه از فرگمنت ها استفاده کنم، با لیست ویوی داخل اکتیویتی (همون چیزی که توی آموزش ها هست) تست کردم و بدون مشکل کار کرد. اتفاقا اون سورس رو هم دارم و همین الان هم تستش کردم. حالا همون کدها رو آوردم داخل فرگمنت. (11 سال پیش)
0 0
ببخشید یه سوال: توی لوگ بالا، اون 25 تا system error مربوط به چی هستن و چجوری میشه برطرفشون کرد؟ یکیش که من خوندم مربوط میشد به کنسل کردن ترد. (11 سال پیش)
پاسخ به سوال 
hosseinAmini  11 سال پیش
0 0

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

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

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


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