انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در کار با لیست ویو

مشکل در کار با لیست ویو

#1
با عرض سلام
من توی برنامه م احتیاج به ساختن یک لیست ویو دارم که یه سری آبجک که توی یه آرایه ذخیره شدن رو توی اون لیست ویو نمایش بده
و برای اینکار سعی کردم از این لینک (پاسخ اول) استفاده کنم:

http://stackoverflow.com/questions/50708...-arraylist

ولی دقیقا نتونستم کدهایی که اونجاست رو پیاده کنم، مثلا کد

کد پی‌اچ‌پی:
[code]
         
lv = (ListViewfindViewById(R.id.your_list_view_id);
[/
code

با اینکه من هم یک فایل xml برای طراحی هر سطر از لیستم، ساختم و اسمش هم list_view1 هست، ولی وقتی R.id. رو میزنم اصلا فایلی که ساختم رو نمیاره و اگر خودم تایپش کنم هم ارور میگیره که cannot be resolved or not a field
برای همین به جای این کد ازکد زیر استفاده کردم که نمیدونم اون کاری رو که من میخوام رو انجام میده یا نه :

کد پی‌اچ‌پی:
lv =  getListView(); 

(برای قرار دادن این کد هم مجبور شدم خود activity اصلیم رو به جای مشتق کردن از activity، از ListActivity مشتق کنم)
میخواستم بپرسم اون فایل xml ی که میسازم باید چیز خاصی داشته باشه که اینجا بتونم بهش ارجاع بدم؟
کد فایل list_view1.xml م هم اینه:

کد پی‌اچ‌پی:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
     
    
      <LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >  
         
    <TextView
    android:id="@+id/display_name"
    style="@style/riz"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/text_1"/>

    <TextView
    android:id="@+id/display_period"
    style="@style/riz"
    android:layout_width="20dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/text_2"/>
   
   
   <TextView
    android:id="@+id/display_unit"
    style="@style/riz"
    android:layout_width="40dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/text_3"/>
   
   <TextView
    android:id="@+id/display_description"
    style="@style/riz"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/text_4"/>
   
   <TextView
    android:id="@+id/display_hour_of_start"
    style="@style/riz"
    android:layout_width="40dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/text_5"/>

   <TextView
    android:id="@+id/display_hour_of_end"
    style="@style/riz"
    android:layout_width="40dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/text_6" />
   
   
   </LinearLayout>
  
    
</LinearLayout> 

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

کد پی‌اچ‌پی:
public class Show_alarms_list1 extends ListActivity
{

    private 
ListView lv;

    @
Override
    
public void onCreate(Bundle savedInstanceState
    {
         
super.onCreate(savedInstanceState);
         
setContentView(R.layout.show_alarms_list1);

        
          
lv =  getListView();
          
         
ArrayList<Alarm_first_typeMyApplication.getAlarms1();
          
         
ArrayAdapter<Alarm_first_typeA_adapter = new ArrayAdapter<Alarm_first_type>(this,android.R.layout.simple_list_item_1,A);
         
lv.setAdapter(A_adapter);
         
    }
        


توی فایل xml مربوط به این فایل جاوا هم کد زیر رو نوشتم :

کد پی‌اچ‌پی:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    
xmlns:tools="http://schemas.android.com/tools"
    
android:layout_width="match_parent"
    
android:layout_height="match_parent"
    
android:paddingBottom="@dimen/activity_vertical_margin"
    
android:paddingLeft="@dimen/activity_horizontal_margin"
    
android:paddingRight="@dimen/activity_horizontal_margin"
    
android:paddingTop="@dimen/activity_vertical_margin"
    
tools:context="ir.AlarmTiming.Show_alarms_list1" >

    
   
    <
ListView
        android
:id="@android:id/list"
        
android:layout_width="fill_parent"
        
android:layout_height="150dp" />

</
RelativeLayout


با این برنامه خروجی ای که برام نمایش داده میشه اصلا شبیه اون چیزی نیست که میخوام! و از هر عنصری که توی آرایه هست فقط اسم پکیج و اسم کلاس خودش و یه شماره(به شکل یه کلمه ی به هم چسبیده، انگار مثلا id اون آبجکت رو داره نشون میده) برام نشون میده و اصلا فیلدهای خودش رو نشون نمیده(حق هم داره چون من اصلا بهش نگفتم مثل کدوم فایل xml نمایش بده!)

ولی همونطور که توی اون لینک بود اصلا کلاسی از arrayAdapter مشتق نکردم که ازون شیء بسازم و از خود arrayAdapter ساختم
قبلا هم یه لیست برای نمایش یه تعداد عکس ساخته بودم(توی همین پروژه) که راه کلیش شبیه به کلید 843 بود (یعنی با کمک تعریف یک کلاس که از arrayAdapter ارث بری کنه و...) ولی راستش اون بار هم به کمک یه سایت بود که دقیقا و مرحله به مرحله گفته بود چیکار کنم، یعنی زیاد نمیدونم فلسفه ی این که کلاسی مثل myAdapter تعریف میکنیم چیه، میخواستم ببینم کلا برای چی بعضی جاها لازمه و بعضی جاها لازم نیست(البته ممکنه توی اون لینکی که گذاشتم هم برای سادگی کار از خود arrayAdapter شیء ساخته و در اصل برای این هم باید یه کلاس مشتق شده از arrayAdapter بسازم و از اون استفاده کنم)
الان مشکل برنامه ی من از اون بخش arrayAdapter هست که باید حتما یه کلاس جدید ارث بری شده ازش بسازم و بقیه ی ماجرا؟ یا اینکه مشکل از اون بخشه که نمیتونم فایل xml م رو به برنامه بشناسونم؟ یا کلا مشکل از جای دیگه س؟
خیلی هم سعی کردم یه کلاس از arrayAdapter مشتق کنم برای این، ولی چون اصلا نمیفهمم چی باید توش بنویسم نتونستم، توی سرچ هام هم خیلی دیدم که دنبال پیاده سازی بدون اینکار میگشتن، منم ترجیحم اینه بدون اینکار باشه چون اصلا نمیفهممش، ولی اگر ساختنش لازمه لطفا برای اون هم یه کم راهنماییم کنین
ببخشید اگه سوالم خیلی طولانی شد
اگه میشه یه کم سریعتر جواب بدین خیلی موردم اورژانسیه(البته همیشه سریع جواب میدین)
پیشاپیش ممنون از جوابتون
پاسخ

مشکل در کار با لیست ویو

#2
سلام.
ابتدا بگذارید در مورد مشکل cannot be resolved or not a field که مربوط به عدم شناسایی فایل xml بوده، توضیح بدهم که صرفا مربوط به ساخت ListView نیست و یک مشکل رایج است که گاهی منابع ساخته شده، در کلاس R شناسایی نمی شوند که در مورد این مشکل، در موضوع زیر صحبت شده است :

http://www.kelidestan.com/forum/showthread.php?tid=4916

اما در مورد خود ماهیت ListView ، توصیه کلی بنده این است که در مواردی مثل ListView که ممکن است کمی کدها پیچیده باشند (و همچنین چندین نوع کدنویسی برای آن داریم)، ابتدا یک پروژه اندروید کامل را از اینترنت دریافت کرده و تست کنید، اگر درست بود و کدنویسی آن نیز مناسب برای مورد مورد نظر شما بود، آنگاه به ویرایش و توسعه آن بپردازید. 
اما در مورد این سوال که چرا گاهی از ArrayAdapter استفاده می شود و گاهی یک Adapter جدید بر اساس توسعه ArrayAdapter می سازیم، باید بگویم که این مسئله، به پیچیدگی ListView برمی گردد. یعنی در مواردی که تنها از ArrayAdapter استفاده می شود، تعدادی رشته (String) داریم که باید در TextView موجود در لایه گرافیکی (فایل xml) مربوط به هر item ، نمایش داده شوند. اما در موارد پیچیده تر که باید برای هر item ، عنصرهایی از لایه گرافیکی را شناسایی کرده و ویژگی ها و منابع مورد نظرمان را برای آنها تعیین کنیم (که حتی این ویژگی ها و منابع ممکن است برای ردیف های مختلف، متفاوت باشند)، دیگر ArrayAdapter مناسب نیست و باید یک Adapter پیچیده تر را بر اساس توسعه آن بسازیم.
خود بنده معمولا حتی اگر با یک Listview ساده سر و کار داشته باشم، باز هم سعی می کنم Adapter سفارشی بسازم تا در آینده، در صورت تصمیم برای پیچیده تر کردن ListView ، نیاز به تغییر زیادی نباشد.
در خود کلیدهای سایت هم، دو کلید وجود دارد که یکی بر اساس ArrayAdapter می باشد :

کلید شماره 246

و دیگری بر ااساس ساخت یک Adapter سفارشی :

کلید شماره 843

اگر نگاهی به ساختار آن دو بیندازید، تفاوت ها را متوجه می شوید و همچنین کلید دومی، مثال کامل و مناسبی برای ساخت یک ListView می باشد.
اما چون کدهایی را ذکر کردید، توضیحاتی را هم در مورد آنها ذکر می کنم. ابتدا کد زیر :

کد پی‌اچ‌پی:
lv = (ListViewfindViewById(R.id.your_list_view_id); 

کد بالا برای شناسایی یک ListView تعریف شده در لایه گرافیکی متناظر با Activity می باشد. یعنی در فایل xml متناظر با Activity ، یک تگ ListView داریم که id آن برابر your_list_view_id بوده است. 
اما کد زیر :

کد پی‌اچ‌پی:
lv =  getListView(); 

کد بالا برای شناسایی ListView در یک ListActivity به کار می رود، نه در یک Activity (که البته خودتان نیز این نکته را تذکر دادید)(زیرا معمولا برنامه نویسان گیج می شوند که چرا گاهی کد بالا عمل می کند و گاهی عمل نمی کند). در این مورد، در لینک زیر نیز توضیحاتی داده شده است (پاسخ اول در این لینک) :

http://stackoverflow.com/questions/62755...n-activity

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط mahsa71 ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان