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

Custom لیست ویو در اندروید


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

سفارشی سازی لیست ویو Listview :

در بیشتر اپلیکیشن های اندرویدی لازم است ، که لیستی سفارشی بسازیم تا بتوانیم کلیه اطلاعات مورد نظر خود را در لیست جا دهیم مثلا بخواهیم هم تصاویر و  هم متن در کنار هم قرار گیرند، و یا اینکه هر نوع لیستی که مدنظر دارید را میتوانید پیاده سازی کنید.

در بخش دوم آموزش های  لیست ویو Listview به لیست سفارشی میپردازیم، که تعدادی ایتم همراه با تصاویر را لیست میکند.

1-ابتدا باید یک xml برای طرح لیست خود ایجاد کنیم :

<?xml version="1.0" encoding="utf-8"?>   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:padding="5dp" >            android:id="@+id/logo"       android:layout_width="50px"       android:layout_height="50px"       android:layout_marginLeft="5px"       android:layout_marginRight="20px"       android:layout_marginTop="5px"       androidrc="@drawable/windowsmobile_logo" >               android:id="@+id/label"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="@+id/label"       android:textSize="30px" >    

2-سپس یک کلاس جاوا ایجاد میکنیم.

یک کلاس ایجاد میکنیم برای اینکه از

ArrayAdapter 

ارث بری کنیم و فیلدها را با متد

getView()

  سفارشی کنید.

public class p30droidAdapter  extends ArrayAdapter {    private final Context context;    private final String[] values;        public p30droidAdapter(Context context, String[] values) {        super(context, R.layout.list_data, values);        this.context = context;        this.values = values;    }     @Override    public View getView(int position, View convertView, ViewGroup parent) {        LayoutInflater inflater = (LayoutInflater) context            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);         View rowView = inflater.inflate(R.layout.list_data, parent, false);        TextView textView = (TextView) rowView.findViewById(R.id.label);        ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);        textView.setText(values[position]);         // Change icon based on name        String s = values[position];         System.out.println(s);         if (s.equals("android_logo")) {            imageView.setImageResource(R.drawable.android_logo);        } else if (s.equals("iOS")) {            imageView.setImageResource(R.drawable.ios_logo);        } else if (s.equals("Blackberry")) {            imageView.setImageResource(R.drawable.blackberry_logo);        } else {            imageView.setImageResource(R.drawable.windowsmobile_logo);        }         return rowView;    }}

3- در مرحله پایانی نیز باید در اکتیویتی خود که لیست نمایش داده میشود .Adapter ساخته شده را لیست کنیم.

public class CustomListviewActivity extends ListActivity  {    /** Called when the activity is first created. */        static final String[] MOBILE_OS =             new String[] { "Android", "iOS", "WindowsMobile", "Blackberry"};    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);         setListAdapter(new p30droidAdapter(this, MOBILE_OS));     }     @Override    protected void onListItemClick(ListView l, View v, int position, long id) {      //گرفتن سطرهای انتخابی        String selectedValue = (String) getListAdapter().getItem(position);        Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show();     }

دستور :

    setListAdapter(new p30droidAdapter(this, MOBILE_OS));

Adapter ساخته شده در کلاس جاوا را میسازد.(این متد چون از کلاس ListActivity ارث بری کرده ایم قابل دسترسی خواهد بود).

[align=center]b9255_Capture.jpg

[align=justify]پسورد : www.p30droid.com[/align]

[/align]

CustomListview.zip

CustomListview.zip

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 2 سال بعد...

با سلام

به نظر من همیشه سعی بشه از ViewModel استفاده بشه خیلی بهتره. دیگه با این شرایط نیازی به if نیست.

مثلا اداپتور اینطوری بشه بهتره :

[shcode=java]

public class p30droidAdapter extends BaseAdapter {

private final Context context;

private final List values;

public p30droidAdapter(Context context, List values) {

super(context, R.layout.list_data, values);

this.context = context;

this.values = values;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

LayoutInflater inflater = (LayoutInflater) context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View rowView = inflater.inflate(R.layout.list_data, parent, false);

TextView textView = (TextView) rowView.findViewById(R.id.label);

ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);

MyViewModel myItem=values.get(position);

textView.setText(myItem.getTitle());

imageView.setImageResource(myItem.getImage());

return rowView;

}

}

[/shcode]

خصوصا وقتی لیست ویو داینامیکه.

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

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

دلیلش چیه دوستان

[shcode=java]package com.example.list;

import android.os.Bundle;

import android.app.Activity;

import android.app.ListActivity;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.ListView;

import android.widget.TextView;

public class MainActivity extends ListActivity {

   

    public String[] Name;

   

   

   

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

       

       

       

        fill_array();

        setListAdapter(new MyAdapter());

       

    }

   

   

   

   

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }

   

    public void fill_array(){

       

       

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

            Name="test "+i;           

        }

       

    }

   

   

    private class MyAdapter extends ArrayAdapter{

        public MyAdapter() {

                super(MainActivity.this,R.layout.row_style,Name);

        }

      

        @Override

        public View getView(int position, View convertView, ViewGroup parent) {

                LayoutInflater in =getLayoutInflater();

                View row=in.inflate(R.layout.row_style , parent , false);

                TextView name=(TextView) row.findViewById(R.id.row_text);

                name.setText(Name[position]);

                return row;

        }      

      

}

}[/shcode]

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

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

دلیلش چیه دوستان

[shcode=java]package com.example.list;

import android.os.Bundle;

import android.app.Activity;

import android.app.ListActivity;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.ListView;

import android.widget.TextView;

public class MainActivity extends ListActivity {

   

    public String[] Name;

   

   

   

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

       

       

       

        fill_array();

        setListAdapter(new MyAdapter());

       

    }

   

   

   

   

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }

   

    public void fill_array(){

       

       

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

            Name="test "+i;           

        }

       

    }

   

   

    private class MyAdapter extends ArrayAdapter{

        public MyAdapter() {

                super(MainActivity.this,R.layout.row_style,Name);

        }

      

        @Override

        public View getView(int position, View convertView, ViewGroup parent) {

                LayoutInflater in =getLayoutInflater();

                View row=in.inflate(R.layout.row_style , parent , false);

                TextView name=(TextView) row.findViewById(R.id.row_text);

                name.setText(Name[position]);

                return row;

        }      

      

}

}[/shcode]

دوستان اگر ممکنه راهنمایی کنید

مشکل هر چی هست از تابع fill_array هستش چون اگر name رو خودم چندتا مقدار بهش بدم کار میکنه

اما با این تابع به مشکل برمیخوره

ممنون میشم بفرمایید مشکل تابع چی هستش

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

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

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

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

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

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

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

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

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

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