簡體   English   中英

如何在帶有圖像的列表視圖中的自定義適配器中添加搜索過濾器?

[英]How to add search filter in custom adapter in listview with images?

抱歉,我是 Java 新手,在研究了如何創建列表視圖后,我在MainActivity自定義適配器中使用了以下代碼。 通過大量研究,我嘗試了很多方法來在 actionbar 中創建 searchView,可能是因為我是 Java 新手並且我對該語言缺乏了解。

在此處輸入圖片說明

主活動代碼


public class MainActivity extends AppCompatActivity {

    ListView lv;
    Context context;

    public static int[] prgmImages = {
            R.drawable.ic_f"
    };

    public static String[] prgmNameList = {
            "Bakoena"
    };

    public static String[] liphoofolo = {
            "Ba ana koena."
    };

    public static String[] phoofolo = {
            "Koena ke phoofolo e lulang metsing e phelang ka ho ja nama ea liphoofolo"
    };

    @SuppressLint("CutPasteId")
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Make sure this is before calling super.onCreate
        setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Objects.requireNonNull(getSupportActionBar()).setDisplayShowTitleEnabled(false);
        Objects.requireNonNull(getSupportActionBar()).setHomeAsUpIndicator(R.drawable.ic_menu);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);

        //custom statusbar for each activity
        /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.RED);
        }*/

        context = this;

        lv = findViewById(R.id.listView);
        lv.setAdapter(new CustomAdapter(this, prgmNameList, liphoofolo, phoofolo, prgmImages));
}
}

自定義適配器代碼



public class CustomAdapter extends BaseAdapter{

    String [] result;
    String [] results;
    String [] resultss;
    Context context;
    int [] imageId;
    private static LayoutInflater inflater=null;
    public CustomAdapter(MainActivity mainActivity, String[] prgmNameList, String[] liphoofolo, String[] phoofolo, int[] prgmImages) {
        // TODO Auto-generated constructor stub
        result=prgmNameList;
        results=liphoofolo;
        resultss=phoofolo;
        context=mainActivity;
        imageId=prgmImages;
        inflater = ( LayoutInflater )context.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


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

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public static class Holder
    {
        TextView tv;
        TextView ts;
        TextView tss;
        ImageView img;
    }
    @SuppressLint({"ViewHolder", "InflateParams"})
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder= new Holder();
        View rowView;

        rowView = inflater.inflate(R.layout.program_list, null);
        holder.tv= rowView.findViewById(R.id.textView1);
        holder.ts= rowView.findViewById(R.id.textView2);
        holder.tss= rowView.findViewById(R.id.textView3);
        holder.img= rowView.findViewById(R.id.imageView1);
        holder.tv.setText(result[position]);
        holder.ts.setText(results[position]);
        holder.tss.setText(resultss[position]);
        holder.img.setImageResource(imageId[position]);

        return rowView;
    }


您需要在 res 文件夾中創建一個名為menu resource type menu的新 android 資源目錄(左鍵單擊 res 文件夾 > 新建 > android 資源目錄)。 在菜單標簽內的文件中創建名為menu_bar菜單資源文件(再次menu_bar擊菜單文件夾>新建>菜單資源文件)添加下降代碼:

 <item
    android:id="@+id/app_bar_search"
    android:icon="@drawable/ic_search_black_24dp"
    android:title="Search"
    app:actionViewClass="androidx.appcompat.widget.SearchView"
    app:showAsAction="always" />

然后在主要活動中添加:

public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_bar, menu);

        MenuItem item = menu.findItem(R.id.app_bar_search);
        SearchView searchView = (SearchView)item.getActionView();

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            return false;
        }
    });
    return true;
}

https://stackoverflow.com/a/41868020/7735363

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM