web-dev-qa-db-ja.com

Android ListViewのカスタム行アイテム

行に次のレイアウトが必要なListViewがあります。

HEADER
Text

HEADERは静的である必要がありますが、Textは数秒ごとに変化します。

String[] arrayを設定して実装し、ArrayAdapterに渡し、データが変更されるたびに設定します。

data_array = populateString();
adapter = new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, Android.R.id.text1,  data_array);
listView.setAdapter(adapter);

私の問題は、上記の形式でデータを表示する方法がわからないことです。

前もって感謝します。

73
pteixeira

このrow.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" >

<TextView Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Header"/>

<TextView 
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:id="@+id/text"/>


</LinearLayout>

このようにメインのXMLレイアウトを作成します

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="horizontal" >

    <ListView
        Android:id="@+id/listview"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent" >
    </ListView>

</LinearLayout>

これはあなたのアダプターです

class yourAdapter extends BaseAdapter {

    Context context;
    String[] data;
    private static LayoutInflater inflater = null;

    public yourAdapter(Context context, String[] data) {
        // TODO Auto-generated constructor stub
        this.context = context;
        this.data = data;
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return data[position];
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View vi = convertView;
        if (vi == null)
            vi = inflater.inflate(R.layout.row, null);
        TextView text = (TextView) vi.findViewById(R.id.text);
        text.setText(data[position]);
        return vi;
    }
}

Javaアクティビティ

public class StackActivity extends Activity {

    ListView listview;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listview = (ListView) findViewById(R.id.listview);
        listview.setAdapter(new yourAdapter(this, new String[] { "data1",
                "data2" }));
    }
}

結果

enter image description here

167
William Kinaan

カスタムリストビューを使用します。

また、カスタムの背景を持つことで、行の外観をカスタマイズできます。 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
 Android:layout_width="fill_parent"
 Android:layout_height="fill_parent"
 Android:orientation="vertical" 
 Android:background="#0095FF"> //background color

<ListView Android:id="@+id/list"
 Android:layout_width="fill_parent"
 Android:layout_height="0dip"
 Android:focusableInTouchMode="false"
 Android:listSelector="@Android:color/transparent"
 Android:layout_weight="2"
 Android:headerDividersEnabled="false"
 Android:footerDividersEnabled="false"
 Android:dividerHeight="8dp" 
 Android:divider="#000000" 
 Android:cacheColorHint="#000000"
Android:drawSelectorOnTop="false">
</ListView>  

主な活動

MainActivityでpopulateString()を定義する

 public class MainActivity extends Activity {

   String data_array[];
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
            data_array = populateString(); 
    ListView ll = (ListView) findViewById(R.id.list);
    CustomAdapter cus = new CustomAdapter();
    ll.setAdapter(cus);
}

class CustomAdapter extends BaseAdapter
{
    LayoutInflater mInflater;


    public CustomAdapter()
    {
        mInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data_array.length;//listview item count. 
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position; 
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final ViewHolder vh;
        vh= new ViewHolder();

        if(convertView==null )
         {
            convertView=mInflater.inflate(R.layout.row, parent,false);
                    //inflate custom layour
            vh.tv2= (TextView)convertView.findViewById(R.id.textView2);

         }
        else
        {
         convertView.setTag(vh);
        }
               //vh.tv2.setText("Position = "+position);
            vh.tv2.setText(data_array[position]);   
                           //set text of second textview based on position

        return convertView;
    }

 class ViewHolder
 {
    TextView tv1,tv2;
 }

   }  
}

row.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" >

 <TextView
    Android:id="@+id/textView1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:text="Header" />

 <TextView
    Android:id="@+id/textView2"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:text="TextView" />

 </LinearLayout>

カスタムレイアウトを膨張させます。 ビューホルダーを使用して、スムーズなスクロールとパフォーマンスを実現します。

http://developer.Android.com/training/improving-layouts/smooth-scrolling.html

http://www.youtube.com/watch?v=wDBM6wVEO7 話はAndroid開発者によるリストビューのパフォーマンスについてです。

enter image description here

9
Raghunandan

リソースレイアウトファイルlist_item.xmlを作成します

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
          Android:orientation="vertical"
          Android:layout_width="match_parent"
          Android:layout_height="wrap_content">
<TextView
        Android:id="@+id/header_text"
        Android:layout_height="0dp"
        Android:layout_width="fill_parent"
        Android:layout_weight="1"
        Android:text="Header"
        />
<TextView
        Android:id="@+id/item_text"
        Android:layout_height="0dp"
        Android:layout_width="fill_parent"
        Android:layout_weight="1"
        Android:text="dynamic text"
        />
</LinearLayout>

そして、このようなアダプターを初期化します

adapter = new ArrayAdapter<String>(this, R.layout.list_item,R.id.item_text,data_array);
5
Akhil

ステップ1: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">


        <ListView
            Android:id="@+id/lvItems"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            />
    </LinearLayout>

ステップ2:Studnet.Java

package com.scancode.acutesoft.telephonymanagerapp;


public class Student
{
    String email,phone,address;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

ステップ3:MainActivity.Java

 package com.scancode.acutesoft.telephonymanagerapp;

    import Android.app.Activity;
    import Android.os.Bundle;
    import Android.widget.ListView;

    import Java.util.ArrayList;

    public class MainActivity extends Activity  {

        ListView lvItems;
        ArrayList<Student> studentArrayList ;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lvItems = (ListView) findViewById(R.id.lvItems);
            studentArrayList = new ArrayList<Student>();
            dataSaving();
            CustomAdapter adapter = new CustomAdapter(MainActivity.this,studentArrayList);
            lvItems.setAdapter(adapter);
        }

        private void dataSaving() {

            Student student = new Student();
            student.setEmail("[email protected]");
            student.setPhone("1234567890");
            student.setAddress("Hyderabad");
            studentArrayList.add(student);


            student = new Student();
            student.setEmail("[email protected]");
            student.setPhone("1234567890");
            student.setAddress("Banglore");
            studentArrayList.add(student);

            student = new Student();
            student.setEmail("[email protected]");
            student.setPhone("1234567890");
            student.setAddress("Banglore");
            studentArrayList.add(student);

            student = new Student();
            student.setEmail("[email protected]");
            student.setPhone("1234567890");
            student.setAddress("Banglore");
            studentArrayList.add(student);
        }


    }

ステップ4:CustomAdapter.Java

  package com.scancode.acutesoft.telephonymanagerapp;

    import Android.content.Context;
    import Android.view.LayoutInflater;
    import Android.view.View;
    import Android.view.ViewGroup;
    import Android.widget.BaseAdapter;
    import Android.widget.TextView;

    import Java.util.ArrayList;


    public class CustomAdapter extends BaseAdapter
    {
        ArrayList<Student> studentList;
        Context mContext;


        public CustomAdapter(Context context, ArrayList<Student> studentArrayList) {
            this.mContext = context;
            this.studentList = studentArrayList;

        }

        @Override
        public int getCount() {
            return studentList.size();
        }
        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

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

            Student student = studentList.get(position);
            convertView = LayoutInflater.from(mContext).inflate(R.layout.student_row,null);

            TextView tvStudEmail = (TextView) convertView.findViewById(R.id.tvStudEmail);
            TextView tvStudPhone = (TextView) convertView.findViewById(R.id.tvStudPhone);
            TextView tvStudAddress = (TextView) convertView.findViewById(R.id.tvStudAddress);

            tvStudEmail.setText(student.getEmail());
            tvStudPhone.setText(student.getPhone());
            tvStudAddress.setText(student.getAddress());


            return convertView;
        }
    }
2
Manikanta Reddy

BaseAdapterをフォローし、カスタムXmlファイルを作成して、それをBaseAdpterにバインドし、Listviewを入力します こちらを参照してください 必要に応じてxmlファイルを変更する必要があります.

1