列表视图筛选不工作 - 机器人视图、机器人、列表、工作

2023-09-04 07:00:06 作者:蓝色の天空

我绑来实现我的应用程序的搜索功能。我使用的是自定义的 ArrayAdapter<字符串> 列表视图因为我有两个 textViews 成一排。我的应用程序并不强制关闭,但搜索不能正常工作。它不过滤列表视图,但是当我输入的东西是不存在的列表视图,它显示未发现商品页面正常。可能是什么问题?这里是code。请指引我正确的道路!

MainActivity.java

 公共类MainActivity延伸活动{
最终的String [] elename ={"Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Fluorine","Neon","Sodium","Magnesium","Aluminium","Silicon","Phosphorous","Sulphur","Chlorine","Argon","Potassium","Calcium","Scandium","Titanium","Vanadium","Chromium","Manganese","Iron","Cobalt","Nickel","Copper","Zinc","Gallium","Germanium","Arsenic","Selenium","Bromine","Krypton","Rubidium","Strontium","Yttrium","Zirconium","Niobium","Molybdenum","Technetium","Ruthenium","Rhodium","Palladium","Silver","Cadmium","Indium","Tin","Antimony","Tellurium","Iodine","Xenon","Caesium","Barium","Lanthanum","Cerium","Praseodymium","Neodymium","Promethium","Samarium","Europium","Gadolinium","Terbium","Dysprosium","Holmium","Erbium","Thulium","Ytterbium","Lutetium","Hafnium","Tantalum","Tungsten","Rhenium","Osmium","Iridium","Platinum","Gold","Mercury","Thallium","Lead","Bismuth","Polonium","Astatine","Radon","Francium","Radium","Actinium","Thorium","Protactinium","Uranium","Neptunium","Plutonium","Americium","Curium","Berkelium","Californium","Einsteinium","Fermium","Mendelevium","Nobelium","Lawrencium","Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium","Meitnerium","Darmstadtium","Roentgenium","Copernicium","Ununtrium","Ununquadium","Ununpentium","Ununhexium","Ununseptium","Ununoctium"};
最终的String []号= {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118"};
CustomAdapter CUS;

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);

    最后的EditText搜索栏=(EditText上)findViewById(R.id.searchbar);
    最后DrawerLayout抽屉=(DrawerLayout)findViewById(R.id.drawer_layout);
    最终的ListView navList =(ListView控件)findViewById(R.id.left_drawer);
    最后的LinearLayout的LinearLayout =(的LinearLayout)findViewById(R.id.left_drawer_layout);
    CUS =新CustomAdapter(MainActivity.this,elename,数);
    navList.setAdapter(CUS);


    navList.setOnItemClickListener(新AdapterView.OnItemClickListener(){
        @覆盖
        公共无效onItemClick(适配器视图<>母公司视图中查看,最终诠释POS,长I​​D){
            //根据号码更改视图

            drawer.closeDrawer(的LinearLayout);
        }
    });

    搜索后//过滤列表视图瞬间
    sea​​rchBar.addTextChangedListener(新TextWatcher(){

        @覆盖
        公共无效onTextChanged(CharSequence的CS,诠释ARG1,诠释ARG2,诠释ARG3){
            //当用户更改文本
            。MainActivity.this.cus.getFilter()过滤器(CS);
        }

        @覆盖
        公共无效beforeTextChanged(CharSequence的arg0中,诠释ARG1,诠释ARG2,诠释ARG3){

        }

        @覆盖
        公共无效afterTextChanged(编辑S){
        }
    });

    //搜索触摸列表视图后,隐藏键盘
    navList.setOnScrollListener(新AbsListView.OnScrollListener(){
        公共无效onScrollStateChanged(AbsListView观点,诠释scrollState){
            //隐藏键盘
            InputMethodManager IMM =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(navList.getWindowToken(),0);
        }

        公共无效onScroll(AbsListView观点,诠释firstVisibleItem,诠释visibleItemCount,诠释totalItemCount){
        }
    });

    navList.setEmptyView(findViewById(R.id.empty));

}
}
 

CustomAdapter.java

 类CustomAdapter扩展ArrayAdapter<字符串>
{
字符串A [],B [];
LayoutInflater mInflater;
公共CustomAdapter(上下文的背景下,的String [] A,字符串B〔])
{
    超(背景下,R.layout.list_item,A);
    this.A = A;
    this.B = B;
    mInflater = LayoutInflater.from(上下文);
}
公共查看getView(INT位置,查看convertView,ViewGroup中父){
    ViewHolder持有人;
    如果(convertView == NULL)
    {
        convertView = mInflater.inflate(R.layout.list_item,父母,假);
        持有人=新ViewHolder();
        holder.tv1 =(TextView中)convertView.findViewById(R.id.element_name);
        holder.tv2 =(TextView中)convertView.findViewById(R.id.element_nos);
        convertView.setTag(保持器);
    }其他{
        支架=(ViewHolder)convertView.getTag();
    }

    holder.tv1.setText(A [位置]);
    holder.tv2.setText(B [位置]);
    返回convertView;
}
静态类ViewHolder
{
    TextView的TV1,TV2;
}
}
 

编辑:应用力收盘接口后执行

 了java.lang.RuntimeException:无法启动活动ComponentInfo {com.Chinmay.navigationdrawer / com.Chinmay.navigationdrawer.MainActivity}:java.lang.ClassCastException:com.Chinmay.navigationdrawer 。主要活动
    在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
    在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
    在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:935)
    在android.os.Handler.dispatchMessage(Handler.java:99)
    在android.os.Looper.loop(Looper.java:130)
    在android.app.ActivityThread.main(ActivityThread.java:3687)
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:507)
    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867)
    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    在dalvik.system.NativeStart.main(本机方法)
    致:java.lang.ClassCastException:com.Chinmay.navigationdrawer.MainActivity
    在com.Chinmay.navigationdrawer.MainActivity.onCreate(MainActivity.java:49)
    在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
 
实操 ABB机器人IO信号配置

解决方案

好了,所以这是你的适配器:

 类CustomAdapter扩展ArrayAdapter<项目> {
    LayoutInflater mInflater;
    公共CustomAdapter(上下文的背景下){
        超级(上下文,0);
        mInflater = LayoutInflater.from(上下文);
    }

    公共查看getView(INT位置,查看convertView,ViewGroup中父){
        ViewHolder持有人;
        如果(convertView == NULL){
            convertView = mInflater.inflate(android.R.layout.simple_expandable_list_item_2,父母,假);
            持有人=新ViewHolder();
            holder.tv1 =(TextView中)convertView.findViewById(android.R.id.text1);
            holder.tv2 =(TextView中)convertView.findViewById(android.R.id.text2);
            convertView.setTag(保持器);
        } 其他 {
            支架=(ViewHolder)convertView.getTag();
        }

        项目项目=的getItem(位置);
        holder.tv1.setText(item.text1);
        holder.tv2.setText(item.text2);
        返回convertView;
    }
}
 

现在你有Item类抱着两个字符串:

 类项目{
    字符串文本1;
    字符串文本2;
    项目(字符串T1,T2的字符串){
        文本1 = T1;
        文本2 = T2;
    }
    @覆盖
    公共字符串的toString(){
        返回文本1;
    }
}
 

和ViewHolder:

 类ViewHolder {
    TextView的TV1,TV2;
}
 

现在的onCreate测试(尝试preSS任何字母P,例如过滤掉茨艾伦项目以P:

  CustomAdapter适配器=新CustomAdapter(本);
的for(int i = 0; I< elename.length;我++){
    adapter.add(新项目(elename [我],第[I]));
}
LV =新的ListView(本);
lv.setTextFilterEnabled(真正的);
lv.setAdapter(适配器);
的setContentView(LV);
 

I am tying to implement search functionality in my app. I am using a custom ArrayAdapter<String> for the listview as I have two textViews in a row. My app doesn't force close but the search is not working properly. It is not filtering the listview but when I type something that is not there in the listview, it shows the no item found page properly. What could be wrong? Here is the code. Please guide me to the correct path!

MainActivity.java

public class MainActivity extends Activity {
final String[] elename ={"Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Fluorine","Neon","Sodium","Magnesium","Aluminium","Silicon","Phosphorous","Sulphur","Chlorine","Argon","Potassium","Calcium","Scandium","Titanium","Vanadium","Chromium","Manganese","Iron","Cobalt","Nickel","Copper","Zinc","Gallium","Germanium","Arsenic","Selenium","Bromine","Krypton","Rubidium","Strontium","Yttrium","Zirconium","Niobium","Molybdenum","Technetium","Ruthenium","Rhodium","Palladium","Silver","Cadmium","Indium","Tin","Antimony","Tellurium","Iodine","Xenon","Caesium","Barium","Lanthanum","Cerium","Praseodymium","Neodymium","Promethium","Samarium","Europium","Gadolinium","Terbium","Dysprosium","Holmium","Erbium","Thulium","Ytterbium","Lutetium","Hafnium","Tantalum","Tungsten","Rhenium","Osmium","Iridium","Platinum","Gold","Mercury","Thallium","Lead","Bismuth","Polonium","Astatine","Radon","Francium","Radium","Actinium","Thorium","Protactinium","Uranium","Neptunium","Plutonium","Americium","Curium","Berkelium","Californium","Einsteinium","Fermium","Mendelevium","Nobelium","Lawrencium","Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium","Meitnerium","Darmstadtium","Roentgenium","Copernicium","Ununtrium","Ununquadium","Ununpentium","Ununhexium","Ununseptium","Ununoctium"};
final String[] nos = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118"};
CustomAdapter cus;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText searchBar = (EditText) findViewById(R.id.searchbar);
    final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
    final ListView navList = (ListView) findViewById(R.id.left_drawer);
    final LinearLayout linearLayout = (LinearLayout)findViewById(R.id.left_drawer_layout);
    cus = new CustomAdapter(MainActivity.this,elename,nos);
    navList.setAdapter(cus);


    navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){
            //Change view according to numbers

            drawer.closeDrawer(linearLayout);
        }
    });

    //filter list view after search instantly
    searchBar.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            MainActivity.this.cus.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {

        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

    //hide the keyboard after search on touch list view
    navList.setOnScrollListener(new AbsListView.OnScrollListener() {
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            //hide keyboard
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(navList.getWindowToken(), 0);
        }

        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        }
    });

    navList.setEmptyView(findViewById(R.id.empty));

}
}

CustomAdapter.java

class CustomAdapter extends ArrayAdapter<String>
{
String A[],B[];
LayoutInflater mInflater;
public CustomAdapter(Context context, String[] A,String B[])
{
    super(context,R.layout.list_item,A);
    this.A = A;
    this.B = B;
    mInflater = LayoutInflater.from(context);
}
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView==null)
    {
        convertView = mInflater.inflate(R.layout.list_item,parent,false);
        holder = new ViewHolder();
        holder.tv1 = (TextView)convertView.findViewById(R.id.element_name);
        holder.tv2 = (TextView)convertView.findViewById(R.id.element_nos);
        convertView.setTag(holder);
    }else{
        holder = (ViewHolder)convertView.getTag();
    }

    holder.tv1.setText(A[position]);
    holder.tv2.setText(B[position]);
    return convertView;
}
static class ViewHolder
{
    TextView tv1,tv2;
}
}

EDIT: App force closing after the implementation of interface.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Chinmay.navigationdrawer/com.Chinmay.navigationdrawer.MainActivity}: java.lang.ClassCastException: com.Chinmay.navigationdrawer.MainActivity
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassCastException: com.Chinmay.navigationdrawer.MainActivity
    at com.Chinmay.navigationdrawer.MainActivity.onCreate(MainActivity.java:49)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)

解决方案

ok so this is your adapter:

class CustomAdapter extends ArrayAdapter<Item> {
    LayoutInflater mInflater;
    public CustomAdapter(Context context) {
        super(context, 0);
        mInflater = LayoutInflater.from(context);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView == null) {
            convertView = mInflater.inflate(android.R.layout.simple_expandable_list_item_2, parent, false);
            holder = new ViewHolder();
            holder.tv1 = (TextView)convertView.findViewById(android.R.id.text1);
            holder.tv2 = (TextView)convertView.findViewById(android.R.id.text2);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder)convertView.getTag();
        }

        Item item = getItem(position);
        holder.tv1.setText(item.text1);
        holder.tv2.setText(item.text2);
        return convertView;
    }
}

now you have Item class holding two Strings:

class Item {
    String text1;
    String text2;
    Item(String t1, String t2) {
        text1 = t1;
        text2 = t2;
    }
    @Override
    public String toString() {
        return text1;
    }
}

and the ViewHolder:

class ViewHolder {
    TextView tv1, tv2;
}

now test it in onCreate (try to press any letter, "p" for example to filter out thos items starting with "p":

CustomAdapter adapter = new CustomAdapter(this);
for (int i = 0; i < elename.length; i++) {
    adapter.add(new Item(elename[i], nos[i]));
}
lv = new ListView(this);
lv.setTextFilterEnabled(true);
lv.setAdapter(adapter);
setContentView(lv);

 
精彩推荐
图片推荐