java - 无法在我的自定义列表视图中实现搜索视图
问题描述
我用谷歌搜索并观看了 youtube,但无法实施。我找到了方法,但我还必须更改我的自定义列表视图代码。但我想在我的自定义列表视图中实现它。
有更难的,但我喜欢这个列表视图。它易于实施。
package com.example.inventorymanagment;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
public class CustomListView extends AppCompatActivity {
static SQLiteDatabase sql;
static ListView lv;
SearchView sv;
static ArrayList midArr = new ArrayList();
static ArrayList mitemNameArr = new ArrayList();
static ArrayList msacPriceStockArr = new ArrayList();
static myAdapter mad;
public void show() {
midArr.clear();
mitemNameArr.clear();
msacPriceStockArr.clear();
mad = new myAdapter(this , midArr ,mitemNameArr ,msacPriceStockArr);
Cursor c = sql.rawQuery("SELECT * FROM item_list", null);
if (c.moveToFirst()) {
do {
midArr.add(c.getInt(0));
mitemNameArr.add(c.getString(1));
msacPriceStockArr.add("Sac/Hsn : "+c.getString(2) + " "
+ "Price : "+c.getInt(3) + " "
+ "Stock : "+c.getInt(4));
//(id ,item_name , sac_hsn , price , stock)
} while (c.moveToNext());
}
lv.setAdapter(mad);
c.close();
}
public void delete(int position){
sql.execSQL("DELETE FROM item_list where ID = " + position + "");
show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.menu_items , menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case R.id.about:
new AlertDialog.Builder(this).setTitle("Credit")
.setMessage("THIS APP IS DEVELOPED BY MANJIT SAHA")
.setPositiveButton("Close" , null).show();
return true;
default:
return false;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_list_view);
lv = findViewById(R.id.customListView);
sv = findViewById(R.id.searchView);
sql = this.openOrCreateDatabase("inventory", MODE_PRIVATE, null);
sql.execSQL("CREATE TABLE IF NOT EXISTS item_list (Id INTEGER PRIMARY KEY," +
"item_name VARCHAR," +
"sac_hsn VARCHAR," +
"price INT," +
"stock INT)");
show();
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(getApplicationContext() , UpdateItems.class);
i.putExtra("Id" , Integer.parseInt(midArr.get(position).toString()));
startActivity(i);
}
});
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
delete(Integer.parseInt(midArr.get(position).toString()));
lv.setSelection(position);
return true;
}
});
}
}
class myAdapter extends ArrayAdapter{
Context context;
ArrayList ridArr = new ArrayList();
ArrayList ritemNameArr = new ArrayList();
ArrayList rsacPriceStockArr = new ArrayList();
myAdapter(Context c , ArrayList id , ArrayList name , ArrayList sps){
super(c , R.layout.row , R.id.idTv , id);
this.context = c;
this.ridArr = id;
this.ritemNameArr = name;
this.rsacPriceStockArr = sps;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = layoutInflater.inflate(R.layout.row , parent , false);
TextView idt = row.findViewById(R.id.idTv);
TextView itemname = row.findViewById(R.id.itemNameRow);
TextView sps = row.findViewById(R.id.spsRow);
idt.setText(ridArr.get(position).toString());
itemname.setText(ritemNameArr.get(position).toString());
sps.setText(rsacPriceStockArr.get(position).toString());
return row;
}
}
请不要删除或说尝试。我从昨天开始就在尝试。请实施它。
解决方案
我实现了它。但我无法使用过滤适配器的适配器来实现它。我正在显示来自 sqlite 的数据。所以,我直接从 sqlite 获取搜索数据。
public void search(String searchText) {
ArrayList localIdArr = new ArrayList();
ArrayList localItemNameArrr = new ArrayList();
ArrayList localSacPriceStockArrr = new ArrayList();
myAdapter localMad = new myAdapter(getApplicationContext(), localIdArr, localItemNameArrr, localSacPriceStockArrr);
Log.i("Query ", searchText);
Cursor c = sql.rawQuery("SELECT * FROM item_list WHERE item_name LIKE '%" + searchText + "%'", null);
if (c.moveToFirst()) {
do {
localIdArr.add(c.getInt(0));
localItemNameArrr.add(c.getString(1));
localSacPriceStockArrr.add("Sac/Hsn : " + c.getString(2) + " "
+ "Price : " + c.getInt(3) + " "
+ "Stock : " + c.getInt(4));
//(id ,item_name , sac_hsn , price , stock)
} while (c.moveToNext());
}
lv.setAdapter(localMad);
c.close();
}
之后,我在 searchView queryTextListener 上调用此函数并传递查询参数.. 它的工作原理就像黄油一样。
推荐阅读
- sharepoint - MS Graph API 调用在本地主机上给出 403(以前工作过)
- python - ModuleNot FoundError:没有名为“lib”的模块
- php - 使用 .htaccess 将 url 映射到被认为是不好的处理程序的处理程序?
- linux - sh中的单行字符串比较
- c - 在 C 和 Fortran 中使用 Leibniz 级数计算 Pi
- java - elasticsearch如何存储数据
- java - 在 PopupMenu 上添加搜索图标以在 Android Studio 项目中搜索国家
- kuzzle - 是否可以在另一个插件的 API 操作上声明管道?
- micronaut - Micronaut-data 使用 Micronaut-test 模拟 CrudRepository
- python - 使用轴坐标系用matplotlib画一条线