ListView with custom Row

Description

The following code shows how to ListView with custom Row.

Example

Layout xml


<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright (c) 2012 Manning
  See the file license.txt for copying permission.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

        <EditText android:id="@+id/main_edittext"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:hint="Write a number"
            android:inputType="number"
            android:singleLine="true"/>

        <Button android:id="@+id/main_add"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:text="Add"
            android:onClick="addNumber"/>
    </LinearLayout>

    <ListView android:id="@+id/main_listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

</LinearLayout>

res/layout/number_row.xml


<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright (c) 2012 Manning
  See the file license.txt for copying permission.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TextView android:id="@+id/numbers_row_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:singleLine="true"/>

    <Button android:id="@+id/numbers_row_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Remove"/>

</LinearLayout>

Java code


/*******************************************************************************
 * Copyright (c) 2012 Manning//  w w w. j av a 2s  .  c o m
 * See the file license.txt for copying permission.
 ******************************************************************************/

import java.util.ArrayList;

import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity implements
    NumbersAdapterDelegate {
  private static final String TAG = MainActivity.class
      .getCanonicalName();

  private ListView mListView;
  private ArrayList<Integer> mNumbers;
  private NumbersAdapter mAdapter;
  private EditText mEditText;

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

    mEditText = (EditText) findViewById(R.id.main_edittext);
    mListView = (ListView) findViewById(R.id.main_listview);
    mNumbers = new ArrayList<Integer>();
    mAdapter = new NumbersAdapter(this, mNumbers);
    mListView.setAdapter(mAdapter);
  }

  @Override
  protected void onResume() {
    super.onResume();
    mAdapter.setDelegate(this);
  }

  @Override
  protected void onPause() {
    super.onPause();
    mAdapter.setDelegate(null);
  }

  @Override
  public void removeItem(Integer value) {
    mNumbers.remove(value);
    Toast
        .makeText(this, "Removed object: " + value, Toast.LENGTH_SHORT)
        .show();
    mAdapter.notifyDataSetChanged();
  }

  public void addNumber(View v) {
    String value = mEditText.getText().toString().trim();
    try {
      mNumbers.add(Integer.valueOf(value));
      mEditText.setText("");
      mAdapter.notifyDataSetChanged();
    } catch (NumberFormatException e) {
      Log.e(TAG, "Couldn't convert to integer the string: " + value);
    }
  }
}
interface NumbersAdapterDelegate {
    void removeItem(Integer value);
}
class NumbersAdapter extends ArrayAdapter<Integer> {
  private LayoutInflater mInflator;
  private NumbersAdapterDelegate mDelegate;

  public NumbersAdapter(Context context, List<Integer> objects) {
    super(context, 0, objects);
    mInflator = LayoutInflater.from(context);
  }

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

    if (null == cv) {
      cv = mInflator.inflate(R.layout.number_row, parent, false);
    }

    final Integer value = getItem(position);
    TextView tv = (TextView) cv.findViewById(R.id.numbers_row_text);
    tv.setText(value.toString());

    View button = cv.findViewById(R.id.numbers_row_button);
    button.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        if (null != mDelegate) {
          mDelegate.removeItem(value);
        }
      }
    });

    return cv;
  }

  public void setDelegate(NumbersAdapterDelegate delegate) {
    mDelegate = delegate;
  }

}
ListView with custom Row




















Home »
  Android »
    Android UI »




UI Basics
Action Bar
Animation
Button
Canvas
CheckBox
Clock Date Picker
Dialog
EditText
Event
Fragment
Gesture
GridView
ImageView
Layout
ListView
Map
Menu
Model
OpenGL
ProgressBar
RadioButton
Spinner
Tab
TextView
Thread
Toast
Video
View
WebView