Android studio:带复选框的列表视图

时间:2016-04-05 18:30:28

标签: java android listview search android-studio

此活动包括键入一个成分(然后显示它)并选中它旁边的复选框。我有以下错误,我无法摆脱(我已经搜索了5个小时的解决方案):

  1. 如果我按回键盘隐藏,当我点击搜索视图时,它再也不会显示,而是进入主屏幕并再次返回。

  2. 如果勾选复选框并滚动,则会随机选中其他复选框。

  3. 如何将已检查的成分放入数组并将该数组发送到下一个活动?(activity_ingredient list)

  4. 以下是代码:

    >>> a += 4.0
    TypeError: invalid type promotion
    

    和活动的xml:

    package ro.mosgoreanu.andu.foodholic;
    
    import android.app.ActionBar;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import com.google.android.gms.appindexing.AppIndex;
    import com.google.android.gms.common.api.GoogleApiClient;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class typing_window extends AppCompatActivity implements view.OnClickListener {
    
        private static Button button;
        String[] items;
        ArrayList<String> listItems;
        ArrayAdapter<String> adapter;
        ListView listView;
        EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_typing_window);
    
            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(this);
    
            listView = (ListView) findViewById(R.id.listview);
            editText = (EditText) findViewById(R.id.txtsearch);
    
            initList();
    
            editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    if(s.toString().equals("")){
                        initList();
                    }
                    else {
                        searchItem(s.toString());
                    }
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    if(s.toString().equals("")){
                        initList();
                    }
                    else {
                        searchItem(s.toString());
                    }
                }
                @Override
                public void afterTextChanged(Editable s) {
                    if(s.toString().equals("")){
                        initList();
                    }
                    else {
                        searchItem(s.toString());
                    }
                }
            });
    
    
        }
    
        public void buttononClick()
        {
            startActivity(new Intent("ro.mosgoreanu.andu.foodholic.ingredient_list"));
        }
    
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button:
                    buttononClick();
                    break;
            }
        }
    
    
        public void searchItem(String textToSearch){
            for(String item:items) {
                if(!item.contains(textToSearch)){
                    listItems.remove(item);
                }
            }
    
            adapter.notifyDataSetChanged();
        }
    
        public void initList(){
            items = new String[]{"breadcumb","butter","capiscum","carrot","cheese","cherry","chicken cutlets","cucumber","egg","flour","garlic","ham","lemon juice","mayonnaise","milk","mushroom","onion (red)","onion (white)","peas","pepper","pork","pickles","potato (red)","potato (white)","soy sauce","tomato","yogurt"};
            listItems = new ArrayList<>(Arrays.asList(items));
            adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.txt, listItems );
            listView.setAdapter(adapter);
        }
    }
    

    和布局xml:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="ro.mosgoreanu.andu.foodholic.typing_window"
    android:background="#89913f">
    
    <include layout="@layout/content_typing_window" />
    
    <EditText
        android:id="@+id/txtsearch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Search Ingredient"
        android:textAlignment="textStart"
        android:paddingLeft="50dp"
        android:layout_toLeftOf="@+id/imageButton"
        android:layout_toStartOf="@+id/imageButton"
        android:allowUndo="true" />
    <SearchView
        android:id="@+id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:paddingEnd="0dp"
        android:paddingLeft="0dp"
        android:translationY="-5dp"
        android:focusable="true"
        android:clickable="true" />
    
    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="View list"
        android:id="@+id/button"
        android:layout_marginRight="26dp"
        android:layout_marginEnd="26dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:background="#00ffffff"
        android:translationX="280dp"
        android:translationY="-2dp"
        android:clickable="true"
        android:allowUndo="true" />
    
    <ListView
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/searchView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:foregroundTint="#ffffff"
        android:paddingTop="50dp" />
    
    </android.support.design.widget.CoordinatorLayout>
    

1 个答案:

答案 0 :(得分:0)

嘿,我使用ArrayAdapter和SearchViewHolder完成了一个 检查并提供任何响应。

<强> MainActivity.java

 import android.content.Context;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.TextView;

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {

        private static Button button;
        String[] items;
        private Fruits[] itemss;
        ArrayList<String> listItems;
        ArrayAdapter<Fruits> adapter;
        ListView listView;
        EditText editText;

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

            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(this);

            listView = (ListView) findViewById(R.id.listview);
            editText = (EditText) findViewById(R.id.txtsearch);
            initList();

            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Fruits it = adapter.getItem(position);
                    it.toggleChecked();
                    SelectViewHolder viewHolder = (SelectViewHolder) view.getTag();
                    viewHolder.getCheckBox().setChecked(it.isChecked());
                }
            });
        }


        private void initList() {
            itemss = (Fruits[]) getLastNonConfigurationInstance();


            ArrayList<Fruits> items = new ArrayList<Fruits>();

            items.add(new Fruits("breadcumb"));
            items.add(new Fruits("butter"));
            items.add(new Fruits("capiscum"));
            items.add(new Fruits("carrot"));
            items.add(new Fruits("cheese"));
            items.add(new Fruits("cherry"));
            items.add(new Fruits("chicken cutlets"));
            items.add(new Fruits("cucumber"));
            items.add(new Fruits("egg"));
            items.add(new Fruits("flour"));
            items.add(new Fruits("garlic"));
            items.add(new Fruits("ham"));
            items.add(new Fruits("lemon juice"));
            items.add(new Fruits("mayonnaise"));
            items.add(new Fruits("milk"));
            items.add(new Fruits("mushroom"));
            items.add(new Fruits("onion (red)"));
            items.add(new Fruits("onion (white)"));
            items.add(new Fruits("peas"));
            items.add(new Fruits("pepper"));
            items.add(new Fruits("pork"));
            items.add(new Fruits("pickles"));
            items.add(new Fruits("potato (red)"));
            items.add(new Fruits("potato (white)"));
            items.add(new Fruits("soy sauce"));
            items.add(new Fruits("tomato"));
            items.add(new Fruits("yogurt"));

            adapter = new ActivityAdapter(this, items);
            listView.setAdapter(adapter);

            editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    MainActivity.this.adapter.getFilter().filter(s);
                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });


        }

        private static class Fruits {
            private String name = "";
            private boolean checked = false;

            public Fruits() {
            }

            public Fruits(String name) {
                this.name = name;
            }

            public Fruits(String name, boolean checked) {
                this.name = name;
                this.checked = checked;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public boolean isChecked() {
                return checked;
            }

            public void setChecked(boolean checked) {
                this.checked = checked;
            }

            public String toString() {
                return name;
            }

            public void toggleChecked() {
                checked = !checked;
            }
        }

        private static class SelectViewHolder {
            private CheckBox checkBox;
            private TextView textView;

            public SelectViewHolder() {
            }

            public SelectViewHolder(TextView textView, CheckBox checkBox) {
                this.checkBox = checkBox;
                this.textView = textView;
            }

            public CheckBox getCheckBox() {
                return checkBox;
            }

            public void setCheckBox(CheckBox checkBox) {
                this.checkBox = checkBox;
            }

            public TextView getTextView() {
                return textView;
            }

            public void setTextView(TextView textView) {
                this.textView = textView;
            }
        }

    private static class ActivityAdapter extends ArrayAdapter<Fruits>{

        private LayoutInflater inflater;

        public ActivityAdapter(Context context, List<Fruits> list) {
            super(context, R.layout.content_typing_window, R.id.txt, list);
            inflater = LayoutInflater.from(context);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Fruits fruit = (Fruits) this.getItem(position);

            CheckBox checkBox;
            TextView textView;

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.content_typing_window, null);


                textView = (TextView) convertView
                        .findViewById(R.id.txt);
                checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);

                convertView.setTag(new SelectViewHolder(textView, checkBox));
                checkBox.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        CheckBox cb = (CheckBox) v;
                        Fruits li = (Fruits) cb.getTag();
                        li.setChecked(cb.isChecked());
                    }
                });
            }
            else {
                SelectViewHolder viewHolder = (SelectViewHolder) convertView
                        .getTag();
                checkBox = viewHolder.getCheckBox();
                textView = viewHolder.getTextView();
            }

            checkBox.setTag(fruit);
            checkBox.setChecked(fruit.isChecked());
            textView.setText(fruit.getName());
            return convertView;
        }
    }





        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button:
                    break;
            }
        }



    //    public void initList(){
    //        items = new String[]{"breadcumb","butter","capiscum","carrot","cheese","cherry"
    //                ,"chicken cutlets","cucumber","egg","flour","garlic","ham","lemon juice","mayonnaise",
    //                "milk","mushroom","onion (red)","onion (white)","peas","pepper","pork","pickles","potato (red)",
    //                "potato (white)","soy sauce","tomato","yogurt"};
    //        listItems = new ArrayList<>(Arrays.asList(items));
    //        adapter = new ArrayAdapter<mItems>(this, R.layout.content_typing_window, R.id.txt, listItems );
    //        listView.setAdapter(adapter);
    //    }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();

            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }

            return super.onOptionsItemSelected(item);
        }



    }