0

私はアプリケーションを開発しています。textview と image を持つリストビューが必要です。私はそれを次のようにしました:

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);

今、リストビューでの検索を次のように適用しています:

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);
}

しかし、問題は次のとおりです。

データを検索すると、検索は適切に行われますが、検索されたアイテムの画像を取得するためのロジックを適用する方法がわからないため、対応する画像は検索されません。

だから私はそれのために何をすべきか私に提案してください。

4

1 に答える 1

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;
    }
于 2013-03-15T09:07:29.340 に答える