2014-05-02 10 views
21

दोस्तों मुझे कुछ मदद की ज़रूरत है। मैं अपनी परियोजना में एक खोज दृश्य को लागू करने की कोशिश कर रहा हूं। लेकिन मेरे प्रोजेक्ट में एक कस्टम एडाप्टर के साथ एक सूचीदृश्य है .. मैंने कई खोजे हैं साइटों लेकिन सभी एक arrayadapter..Lets का उपयोग कर कार्यान्वित उदाहरण कहते हैं कि मैं एक कर्मचारी वर्ग है और यह उनके नाम केवल का उपयोग कर कर्मचारियों को फिल्टर करने के लिए मैं नाम और उम्र fields..How शामिल ..खोज दृश्य में सूची दृश्य कस्टम एडाप्टर

public class MainActivity extends Activity implements SearchView.OnQueryTextListener 
{ 
SearchView mSearchView; 
ListView mListView; 
//String mStrings[]= {"abc","def","efg","ghi","ijk","apple","agxhsdgc","abbbcc"}; 
ArrayList<Employee> emp_list=null; 
EmployeeAdapter emp_adapter=null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mSearchView=(SearchView) findViewById(R.id.searchView1); 
     mListView=(ListView) findViewById(R.id.listView1); 

     emp_list=new ArrayList<Employee>(); 
     emp_list.add(new Employee("ABC", 24)); 
     emp_list.add(new Employee("ACB", 24)); 
     emp_list.add(new Employee("BVF", 28)); 
     emp_list.add(new Employee("BRT", 28)); 
     emp_list.add(new Employee("ANM", 23)); 

     emp_adapter=new EmployeeAdapter(MainActivity.this, emp_list); 
     mListView.setAdapter(emp_adapter); 

//  mListView.setAdapter(new ArrayAdapter<String>(this, 
//    android.R.layout.simple_list_item_1, 
//    mStrings)); 
     mListView.setTextFilterEnabled(true); 
     setupSearchView(); 


    } 
    private void setupSearchView() 
    { 
      mSearchView.setIconifiedByDefault(false); 
      mSearchView.setOnQueryTextListener(this); 
      mSearchView.setSubmitButtonEnabled(true); 
      mSearchView.setQueryHint("Search Here"); 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) 
     { 

      if (TextUtils.isEmpty(newText.toString())) { 
       mListView.clearTextFilter(); 
      } else { 
       mListView.setFilterText(newText.toString()); 
      } 
      return true; 
     } 

     @Override 
     public boolean onQueryTextSubmit(String query) 
     { 
      return false; 
     } 


    } 

और यह मेरा है एडाप्टर क्लास जो बेसएडाप्टर को बढ़ाती है ..

public class EmployeeAdapter extends BaseAdapter { 

    Context ctx; 
    ArrayList<Employee> emp_list; 
    LayoutInflater linf=null; 
    EmployeeHolder holder=null; 






    public EmployeeAdapter(Context ctx, ArrayList<Employee> emp_list) { 
     super(); 
     this.ctx = ctx; 
     this.emp_list = emp_list; 
     linf=(LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public class EmployeeHolder 
    { 
     TextView name; 
     TextView age; 

    } 



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

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return emp_list.get(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 

     if(convertView==null) 
     { 
      convertView=linf.inflate(R.layout.row, parent, false); 
      holder=new EmployeeHolder(); 
      holder.name=(TextView) convertView.findViewById(R.id.name); 
      holder.age=(TextView) convertView.findViewById(R.id.age); 

      convertView.setTag(holder); 
     } 
     else 
     { 
      holder=(EmployeeHolder) convertView.getTag(); 
     } 

     Employee e=(Employee) getItem(position); 


     holder.name.setText(e.getName()); 
     holder.age.setText(String.valueOf(e.getAge())); 

     return convertView; 

    } 

} 

था अग्रिम में anks ..

उत्तर

47

इस तरह की कोशिश करो, उम्मीद है कि इस मदद मिलेगी ...

activity_main.xml

<SearchView 
     android:id="@+id/searchView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 


    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 


</LinearLayout> 

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

    <TextView 
     android:id="@+id/txtName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/txtAge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp"/> 

</LinearLayout> 

MainActivity.java

public class MainActivity extends Activity implements SearchView.OnQueryTextListener 
{ 
    private SearchView mSearchView; 
    private ListView mListView; 
    private ArrayList<Employee> employeeArrayList; 
    private EmployeeAdapter employeeAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mSearchView=(SearchView) findViewById(R.id.searchView1); 
     mListView=(ListView) findViewById(R.id.listView1); 

     employeeArrayList=new ArrayList<Employee>(); 
     employeeArrayList.add(new Employee("ABC", 24)); 
     employeeArrayList.add(new Employee("ACB", 24)); 
     employeeArrayList.add(new Employee("BVF", 28)); 
     employeeArrayList.add(new Employee("BRT", 28)); 
     employeeArrayList.add(new Employee("ANM", 23)); 

     employeeAdapter=new EmployeeAdapter(MainActivity.this, employeeArrayList); 
     mListView.setAdapter(employeeAdapter); 

     mListView.setTextFilterEnabled(true); 
     setupSearchView(); 


    } 
    private void setupSearchView() 
    { 
     mSearchView.setIconifiedByDefault(false); 
     mSearchView.setOnQueryTextListener(this); 
     mSearchView.setSubmitButtonEnabled(true); 
     mSearchView.setQueryHint("Search Here"); 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) 
    { 

     if (TextUtils.isEmpty(newText)) { 
      mListView.clearTextFilter(); 
     } else { 
      mListView.setFilterText(newText); 
     } 
     return true; 
    } 

    @Override 
    public boolean onQueryTextSubmit(String query) 
    { 
     return false; 
    } 


} 

EmployeeAdapter.java

public class EmployeeAdapter extends BaseAdapter implements Filterable { 

    public Context context; 
    public ArrayList<Employee> employeeArrayList; 
    public ArrayList<Employee> orig; 

    public EmployeeAdapter(Context context, ArrayList<Employee> employeeArrayList) { 
     super(); 
     this.context = context; 
     this.employeeArrayList = employeeArrayList; 
    } 


    public class EmployeeHolder 
    { 
     TextView name; 
     TextView age; 
    } 

    public Filter getFilter() { 
     return new Filter() { 

      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       final FilterResults oReturn = new FilterResults(); 
       final ArrayList<Employee> results = new ArrayList<Employee>(); 
       if (orig == null) 
        orig = employeeArrayList; 
       if (constraint != null) { 
        if (orig != null && orig.size() > 0) { 
         for (final Employee g : orig) { 
          if (g.getName().toLowerCase() 
            .contains(constraint.toString())) 
           results.add(g); 
         } 
        } 
        oReturn.values = results; 
       } 
       return oReturn; 
      } 

      @SuppressWarnings("unchecked") 
      @Override 
      protected void publishResults(CharSequence constraint, 
              FilterResults results) { 
       employeeArrayList = (ArrayList<Employee>) results.values; 
       notifyDataSetChanged(); 
      } 
     }; 
    } 

    public void notifyDataSetChanged() { 
     super.notifyDataSetChanged(); 
    } 


    @Override 
    public int getCount() { 
     return employeeArrayList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return employeeArrayList.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     EmployeeHolder holder; 
     if(convertView==null) 
     { 
      convertView=LayoutInflater.from(context).inflate(R.layout.row, parent, false); 
      holder=new EmployeeHolder(); 
      holder.name=(TextView) convertView.findViewById(R.id.txtName); 
      holder.age=(TextView) convertView.findViewById(R.id.txtAge); 
      convertView.setTag(holder); 
     } 
     else 
     { 
      holder=(EmployeeHolder) convertView.getTag(); 
     } 

     holder.name.setText(employeeArrayList.get(position).getName()); 
     holder.age.setText(String.valueOf(employeeArrayList.get(position).getAge())); 

     return convertView; 

    } 

} 

Employee.java

public class Employee { 

    private String name; 
    private int age; 

    public Employee(String name,int age){ 
     this.name = name; 
     this.age = age; 
    } 

    public String getName(){ 
     return name; 
    } 

    public int getAge(){ 
     return age; 
    } 
} 
+0

@Haresh: मेरे मामले में imageView उपयोग कर रहा हूँ यह संभव YTO फिल्टर है – user3265781

+0

लेकिन फ़िल्टरिंग सूची में आइटम पर क्लिक करने पर फ़िल्टर करने के बाद एक समस्या है, फिर भी यह मूल सूची से आइटम खोलता है। मैं googled और समाधान मिला लेकिन मेरे मामले के लिए हल करने में सक्षम नहीं है। –

+0

आपको बहुत बहुत धन्यवाद। यह मेरा दिन बचाया। – Irfan

0

अच्छा जवाब है, लेकिन अभी भी वहाँ कुछ मुद्दों (गलत स्थिति जब onclick, serchview हैं टेक्स्ट ओवरले) जैसा कि टिप्पणी खंड में उल्लिखित है, ताकि आप इसे अनुसरण करके भी कर सकें अधिक जानकारी के लिए जिस तरह से ing

संदर्भ: searchview listview android

मैं इसे परीक्षण किया है और किसी भी मुद्दे को अब तक नहीं मिल रहा है, आप किसी भी मिल जाए, टिप्पणी अनुभाग में उल्लेख करें।

मॉडल वर्ग: MovieNames.java

public class MovieNames { 
    private String movieName; 

    public MovieNames(String movieName) { 
     this.movieName = movieName; 
    } 

    public String getAnimalName() { 
     return this.movieName; 
    } 

} 

2: listview_item.xml फ़ाइल:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp"> 


    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 
  1. ListViewAdapter.java वर्ग सूचीदृश्य के लिए अनुकूलक:

    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; 
        import java.util.Locale; 
    
    
    
    public class ListViewAdapter extends BaseAdapter { 
    
    // Declare Variables 
    
    Context mContext; 
    LayoutInflater inflater; 
    private ArrayList<MovieNames> arraylist; 
    
    public ListViewAdapter(Context context) { 
        mContext = context; 
        inflater = LayoutInflater.from(mContext); 
        this.arraylist = new ArrayList<MovieNames>(); 
        this.arraylist.addAll(MainActivity.movieNamesArrayList); 
    } 
    
    public class ViewHolder { 
        TextView name; 
    } 
    
    @Override 
    public int getCount() { 
        return MainActivity.movieNamesArrayList.size(); 
    } 
    
    @Override 
    public MovieNames getItem(int position) { 
        return MainActivity.movieNamesArrayList.get(position); 
    } 
    
    @Override 
    public long getItemId(int position) { 
        return position; 
    } 
    
    public View getView(final int position, View view, ViewGroup parent) { 
        final ViewHolder holder; 
        if (view == null) { 
         holder = new ViewHolder(); 
         view = inflater.inflate(R.layout.listview_item, null); 
         // Locate the TextViews in listview_item.xml 
         holder.name = (TextView) view.findViewById(R.id.name); 
         view.setTag(holder); 
        } else { 
         holder = (ViewHolder) view.getTag(); 
        } 
        // Set the results into TextViews 
        holder.name.setText(MainActivity.movieNamesArrayList.get(position).getAnimalName()); 
        return view; 
    } 
    
    // Filter Class 
    public void filter(String charText) { 
        charText = charText.toLowerCase(Locale.getDefault()); 
        MainActivity.movieNamesArrayList.clear(); 
        if (charText.length() == 0) { 
         MainActivity.movieNamesArrayList.addAll(arraylist); 
        } else { 
         for (MovieNames wp : arraylist) { 
          if (wp.getAnimalName().toLowerCase(Locale.getDefault()).contains(charText)) { 
           MainActivity.movieNamesArrayList.add(wp); 
          } 
         } 
        } 
        notifyDataSetChanged(); 
        } 
    
        } 
    
  2. मुख्य गतिविधि।जावा वर्ग:

     import android.support.v7.app.AppCompatActivity; 
         import android.os.Bundle; 
         import android.view.View; 
         import android.widget.AdapterView; 
         import android.widget.ListView; 
         import android.widget.SearchView; 
         import android.widget.Toast; 
         import java.util.ArrayList; 
    
         public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener { 
    
         // Declare Variables 
        private ListView list; 
        private ListViewAdapter adapter; 
        private SearchView editsearch; 
         private String[] moviewList; 
        public static ArrayList<MovieNames> movieNamesArrayList = new ArrayList<MovieNames>(); 
    
         @Override 
        public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
    
    // Generate sample data 
    
    moviewList = new String[]{"Xmen", "Titanic", "Captain America", 
         "Iron man", "Rocky", "Transporter", "Lord of the rings", "The jungle book", 
         "Tarzan","Cars","Shreck"}; 
    
    // Locate the ListView in listview_main.xml 
    list = (ListView) findViewById(R.id.listview); 
    
    movieNamesArrayList = new ArrayList<>(); 
    
    for (int i = 0; i < moviewList.length; i++) { 
        MovieNames movieNames = new MovieNames(moviewList[i]); 
        // Binds all strings into an array 
        movieNamesArrayList.add(movieNames); 
    } 
    
    // Pass results to ListViewAdapter Class 
    adapter = new ListViewAdapter(this); 
    
    // Binds the Adapter to the ListView 
    list.setAdapter(adapter); 
    
    // Locate the EditText in listview_main.xml 
    editsearch = (SearchView) findViewById(R.id.search); 
    editsearch.setOnQueryTextListener(this); 
    
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         Toast.makeText(MainActivity.this, movieNamesArrayList.get(position).getAnimalName(), Toast.LENGTH_SHORT).show(); 
        } 
    }); 
          } 
    
        @Override 
        public boolean onQueryTextSubmit(String query) { 
    
           return false; 
        } 
    
    
    
        @Override 
        public boolean onQueryTextChange(String newText) { 
          String text = newText; 
          adapter.filter(text); 
         return false; 
        } 
        } 
    
1

स्रोत कोड

https://drive.google.com/open?id=0BzBKpZ4nzNzUOFlxeHhuWmF0Q1U

package example.abhiandroid.searchviewexample; 

import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.ListView; 
import android.widget.SearchView; 

import java.util.ArrayList; 

public class SearchViewActivity extends AppCompatActivity implements SearchView.OnQueryTextListener { 

    // Declare Variables 
    ListView list; 
    ListViewAdapter adapter; 
    public static SearchView editsearch; 
    String[] animalNameList; 
    ArrayList<AnimalNames> arraylist = new ArrayList<AnimalNames>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_search); 
     // Generate sample data 

     animalNameList = new String[]{"Lion", "Tiger", "Dog", 
       "Cat", "Tortoise", "Rat", "Elephant", "Fox", 
       "Cow","Donkey","Monkey"}; 

     // Locate the ListView in listview_main.xml 
     list = (ListView) findViewById(R.id.listview); 

     for (int i = 0; i < animalNameList.length; i++) { 
      AnimalNames animalNames = new AnimalNames(animalNameList[i]); 
      // Binds all strings into an array 
      arraylist.add(animalNames); 
     } 

     // Pass results to ListViewAdapter Class 
     adapter = new ListViewAdapter(this, arraylist); 

     // Binds the Adapter to the ListView 
     list.setAdapter(adapter); 

     // Locate the EditText in listview_main.xml 
     editsearch = (SearchView) findViewById(R.id.search); 
     editsearch.setOnQueryTextListener(this); 

     editsearch.setOnSuggestionListener(new SearchView.OnSuggestionListener() { 

      @Override 
      public boolean onSuggestionSelect(int position) { 
       return true; 
      } 

      @Override 
      public boolean onSuggestionClick(int position) { 
       Cursor cursor= editsearch.getSuggestionsAdapter().getCursor(); 
       cursor.moveToPosition(position); 
       String suggestion =cursor.getString(2);//2 is the index of col containing suggestion name. 
       editsearch.setQuery(suggestion,true);//setting suggestion 
       return true; 
      } 
     }); 

    } 

    @Override 
    public boolean onQueryTextSubmit(String query) { 
     Log.e("keshav","query ->"+query); 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     String text = newText; 

     Log.e("keshav","newText ->"+newText); 

     adapter.filter(text); 
     return false; 
    } 
} 


package example.abhiandroid.searchviewexample; 

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Locale; 

public class ListViewAdapter extends BaseAdapter { 

    // Declare Variables 
    Context mContext; 
    LayoutInflater inflater; 
    private List<AnimalNames> animalNamesList = null; 
    private ArrayList<AnimalNames> arraylist; 

    public ListViewAdapter(Context context, List<AnimalNames> animalNamesList) { 
     mContext = context; 
     this.animalNamesList = animalNamesList; 
     inflater = LayoutInflater.from(mContext); 
     this.arraylist = new ArrayList<AnimalNames>(); 
     this.arraylist.addAll(animalNamesList); 
    } 

    public class ViewHolder { 
     TextView name; 
    } 

    @Override 
    public int getCount() { 
     return animalNamesList.size(); 
    } 

    @Override 
    public AnimalNames getItem(int position) { 
     return animalNamesList.get(position); 
    } 

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

    public View getView(final int position, View view, ViewGroup parent) { 
     final ViewHolder holder; 
     if (view == null) { 
      holder = new ViewHolder(); 
      view = inflater.inflate(R.layout.search_list_view_item, null); 
      // Locate the TextViews in search_list_view_itemiew_item.xml 
      holder.name = (TextView) view.findViewById(R.id.name); 
      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 
     // Set the results into TextViews 

     holder.name.setText(animalNamesList.get(position).getAnimalName()); 

     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.e("keshav","click list item ->"+animalNamesList.get(position).getAnimalName()); 
       SearchViewActivity.editsearch.setQuery(animalNamesList.get(position).getAnimalName(), false); 

       Log.e("keshav","click size ->"+animalNamesList.size()); 
       // TOdo size always 1 Important See cs Electric Project in Holostik 
       Log.e("keshav","click size ->"+animalNamesList.get(0).getAnimalName()); 
      } 
     }); 
     return view; 
    } 

    // Filter Class 
    public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 
     animalNamesList.clear(); 
     if (charText.length() == 0) { 
      animalNamesList.addAll(arraylist); 
     } else { 
      for (AnimalNames wp : arraylist) { 
       if (wp.getAnimalName().toLowerCase(Locale.getDefault()).contains(charText)) { 
        animalNamesList.add(wp); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 

} 

package example.abhiandroid.searchviewexample; 

public class AnimalNames 
{ 
    private String animalName; 

    public AnimalNames(String animalName) { 
     this.animalName = animalName; 
    } 

    public String getAnimalName() { 
     return this.animalName; 
    } 

} 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <SearchView 
     android:id="@+id/search" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:iconifiedByDefault="false"> 

     <requestFocus /> 
    </SearchView> 

    <ListView 
     android:id="@+id/listview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/search" /> 

</RelativeLayout> 


list item.xml 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp"> 

    <TextView 
     android:id="@+id/nameLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Animal : " /> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/nameLabel" /> 

</RelativeLayout> 

मुबारक कोडिंग

+0

मुझे वोट देने के लिए धन्यवाद –

संबंधित मुद्दे