[Android] Search in listview custom Arrayadapter and listener when click item

Public on June 5, 2014
Search in listview custom Arrayadapter and listener when click each item in listview it wil open new Activity.
and display text of item you click in listview .

Let start with layout file :
activity_main.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"
    tools:context=".MainActivity" >
Download  source here !
    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:hint="Search here"
        android:layout_marginLeft="28dp"
        android:ems="10" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1" >

    </ListView>

</RelativeLayout>




single_item.xml  (for each line in listview)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/imageView1"
        android:text="TextView"
        android:paddingTop="10sp"
        android:paddingLeft="5sp"
        android:textSize="18sp" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>


sub_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/imageView1"
        android:text="TextView"
        android:paddingTop="10sp"
        android:paddingLeft="5sp"
        android:textSize="18sp" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

Now we have two activity and one arrayadapter custome :

CustomeArrayAdapter.java

package com.example.androidtest1;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.sax.RootElement;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomeArrayAdapter extends ArrayAdapter<String>{
    Context context;
    ArrayList<String> arrString;
    private LayoutInflater inflater;

    CustomeArrayAdapter(Activity context,
            ArrayList<String> arrString) {
        super(context, R.layout.single_item, arrString);
        this.context = context;
        this.arrString = arrString;
        this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public Context getContext() {
        return super.getContext();
    }

    @SuppressWarnings("rawtypes")
    @Override
    public View getView(final int position,View convertView, ViewGroup parent) {
        convertView = inflater.inflate(R.layout.single_item, null);
        TextView tv= (TextView)convertView.findViewById(R.id.tv);
        ImageView img = (ImageView)convertView.findViewById(R.id.imageView1);
        tv.setText(arrString.get(position));
        img.setImageResource(R.drawable.ic_launcher);
        return convertView;

    }
}


MainActivity.java

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.View;
import android.view.ViewDebug.IntToString;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {

    EditText editsearch;
    ListView listView;
    private ArrayList<String> mItems;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        editsearch = (EditText)findViewById(R.id.editText1);
        listView = (ListView)findViewById(R.id.listView1);
        
        mItems = new ArrayList<String>();
        mItems.add("Diary of a Wimpy Kid 6: Cabin Fever");
        mItems.add("Steve Jobs");
        mItems.add("Inheritance (The Inheritance Cycle)");
        mItems.add("11/22/63: A Novel");
        mItems.add("The Hunger Games");
        mItems.add("The LEGO Ideas Book");
        mItems.add("Explosive Eighteen: A Stephanie Plum Novel");
        mItems.add("Catching Fire (The Second Book of the Hunger Games)");
        mItems.add("Elder Scrolls V: Skyrim: Prima Official Game Guide");
        mItems.add("Death Comes to Pemberley");
        mItems.add("Diary of a Wimpy Kid 6: Cabin Fever");
        mItems.add("Steve Jobs");
        mItems.add("Inheritance (The Inheritance Cycle)");
        mItems.add("11/22/63: A Novel");
        mItems.add("The Hunger Games");
        mItems.add("The LEGO Ideas Book");
        mItems.add("Explosive Eighteen: A Stephanie Plum Novel");
        mItems.add("Catching Fire (The Second Book of the Hunger Games)");
        mItems.add("Elder Scrolls V: Skyrim: Prima Official Game Guide");
        mItems.add("Death Comes to Pemberley");

        listView.setAdapter(new CustomeArrayAdapter(MainActivity.this, mItems));
        
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener()  {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                intent.putExtra("thanhcs",mItems.get(position));
                startActivity(intent); //when you click,
                   //open new activity and intent text
            }
            
            
        });
        
        
        editsearch.addTextChangedListener(new TextWatcher() { //edit search
            //Event when changed word on EditTex
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                    ArrayList<String> temp = new ArrayList<String>();
                    int textlength = editsearch.getText().length();
                    temp.clear();
                    for (int i = 0; i < mItems.size(); i++)
                    {
                        if (textlength <= mItems.get(i).length())
                        {
                            if(editsearch.getText().toString().equalsIgnoreCase(
                                    (String)
                                    mItems.get(i).subSequence(0,
                                            textlength)))
                            {
                                temp.add(mItems.get(i));
                            }
                        }
                    }
          listView.setAdapter(new CustomeArrayAdapter(MainActivity.this, temp));
                }

            
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
                
            }
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                
            }
        });
    
    }


    @Override
    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;
    }

}


Sub_Activity.java

package com.example.androidtest1;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

import com.example.androidtest1.*;
public class SubActivity extends Activity{ 
    
    TextView tv;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        setContentView(R.layout.sub_activity);
        super.onCreate(savedInstanceState);        
        tv =(TextView)findViewById(R.id.tv);
        Intent intent = getIntent();
        String text = intent.getExtras().getString("thanhcs");
        tv.setText(""+text);
    }
}


Download source code here 









[Advertising]Faster Thinking - Speed up your brain


Faster Thinking Game



sentiment_satisfied Emoticon