Farzad Sarseifi

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

7 ارسال در این موضوع قرار دارد

سفارشی سازی لیست ویو 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

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


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

please what is password for customlistview.zip

many thanks

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


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

please what is password for customlistview.zip

many thanks

the password is

www.p30droid.com

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


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

با سلام

به نظر من همیشه سعی بشه از 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]

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


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

Many thanks for customlistview password

peddy


Thanks but password not working

peddy

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


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

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

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

[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 رو خودم چندتا مقدار بهش بدم کار میکنه

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

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

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


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

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری