2013-03-15 4 views
0

Я разрабатываю приложение. В котором мне нужен вид списка, имеющий textview и изображение. Я сделал это, как:ListView с TextView с изображением ans search

Список просмотра в XML:

<ListView 
    android:id="@+id/listview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_above="@+id/tablelayout1" 
    android:layout_below="@+id/edittext_searchbar" 
    android:layout_margin="15dip" 
    android:listSelector="@drawable/list_selector" 
    android:divider="#623b42" 
    android:dividerHeight="0.5dip" 
    android:cacheColorHint="#00000000" 
    android:overScrollMode="never" > 
</ListView> 

Адаптер в виде списка в XML является:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_item_selector" > 

    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:stretchColumns="*" 
     tools:ignore="UselessParent" > 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      tools:ignore="UselessParent" > 

      <TextView 
       android:id="@+id/textview" 
       android:layout_width="0sp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center_vertical" 
       android:paddingLeft="5sp" 
       android:textColor="@color/color_black" 
       android:textSize="18sp" 
       tools:ignore="SelectableText" /> 

      <ImageView 
       android:id="@+id/imageview" 
       android:layout_width="0sp" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:contentDescription="@string/string_todo" 
       android:paddingRight="5sp" /> 
     </TableRow> 
    </TableLayout> 

</RelativeLayout> 

.java адаптера как:

public class CustomListAdapter extends ArrayAdapter<String> { 
    /** Global declaration of variables. As there scope lies in whole class. */ 
    private Context context; 
    private String[] Listofdata; 
    ImageClass icon[] = null; 

    /** Constructor Class */ 
    public CustomListAdapter (Context context,String[] mainList, ImageClass[] MenuIcon) { 
     super(context,R.layout.mainmenu_screen_adapter_layout,mainList); 
     this.context = context; 
     this.Listofdata= mainList; 
     this.icon = MenuIcon; 
    } 

    /** Implement getView method for customizing row of list view. */ 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     // Creating a view of row. 
     View rowView = inflater.inflate(R.layout.mainmenu_screen_adapter_layout, parent, false); 

     TextView textView = (TextView)rowView.findViewById(R.id.textview); 
     ImageView imageView = (ImageView)rowView.findViewById(R.id.imageview); 


     textView.setText(menuListofAdapter[position]); 

     ImageClass MenuIcon = icon[position]; 
     imageView.setImageResource(MenuIcon .icon); 

     return rowView; 
    } 
} 

В main.java я сделал код как:

Для изображений я создал массив изображения, как:

ImageClass MenuIcon[] = new ImageClass []{ 
    new ImageClass (R.drawable.veg), 
    new ImageClass (R.drawable.non_veg), 
    new ImageClass (R.drawable.liquor), 
    new ImageClass (R.drawable.desert), 
    new ImageClass (R.drawable.beverages) 
}; 

Вызывающий к изготовленному на заказ адаптера:

CustomListAdapter adapter = new CustomListAdapter (this,mainList,MenuIcon); 
listView.setAdapter(adapter); 

Сейчас я подаю на поиск по ListView, как:

edittextSearch.addTextChangedListener(new TextWatcher(){ 
    public void afterTextChanged(Editable s){ 
    // Abstract Method of TextWatcher Interface. 
} 
public void beforeTextChanged(CharSequence s,int start, int count, int after){ 
    // Abstract Method of TextWatcher Interface. 
} 
public void onTextChanged(CharSequence s,int start, int before, int count){ 
    searchedData.clear(); 
    for (int i = 0, j = 0; i < mainMenuList.length; i++) { 
     if (((String)mainList[i].toLowerCase(Locale.getDefault())).contains(edittextSearch.getText().toString().toLowerCase())) { 
      searchedData.add(mainMenuList[i].toString()); 
     } 
    } 
    menuSearchList = searchedData.toArray(new String[searchedData.size()]); 
    CustomListAdapter adapter = new CustomListAdapter (main.this,menuSearchList,MenuIcon);    
    listView.setAdapter(adapter); 
} 

Но выпуск:

Когда я просматриваю любые данные, поиск выполнен правильно, но соответствует ding изображение не выполняется, потому что я не знаю, как применять логику для получения изображения искомого элемента.

Итак, пожалуйста, предложите мне, что я должен сделать для этого.

+0

сделать ваш поиск на основе text.based на поиск текста изображений дисплея соответственно в ListView – Raghunandan

+0

HTTP: // stackoverflow.com/questions/13090046/how-to-implement-search-in-customlistview-based-on-class-item-of-pojo-class-in-a. – Raghunandan

ответ

0

Попробуйте

//put this where you declared searchedData 
    ArrayList<ImageClass> mImageSearched = new ArrayList<ImageClass>; 

public void onTextChanged(CharSequence s,int start, int before, int count){ 
    searchedData.clear(); 
    mImageSearched.clear(); 
    for (int i = 0, j = 0; i < mainMenuList.length; i++) { 
     if (((String)mainList[i].toLowerCase(Locale.getDefault())).contains(edittextSearch.getText().toString().toLowerCase())) { 
      searchedData.add(mainMenuList[i].toString()); 
      mImageSearched.add(MenuIcon[i]); 
     } 
    } 
    menuSearchList = searchedData.toArray(new String[searchedData.size()]); 
    ImageClass mImageSearchArray[] = mImageSearched.toArray(new ImageClass[mImageSearched.size[]]); 

    CustomListAdapter adapter = new CustomListAdapter (main.this,menuSearchList,mImageSearchArray);    
    listView.setAdapter(adapter); 
} 

и вы также должны изменить конструктора адаптера

public CustomListAdapter (Context context,String[] mainList, ImageClass[] mMenuIcon) { 
     super(context,R.layout.mainmenu_screen_adapter_layout,mainList); 
     this.context = context; 
     this.Listofdata= mainList; 
     this.icon = mMenuIcon; 
    } 
Смежные вопросы