【问题标题】:How can I change it so checkboxes instead of text appear?如何更改它以便出现复选框而不是文本?
【发布时间】:2016-01-02 14:12:10
【问题描述】:

如何更改它以显示复选框而不是文本? 现在用户可以搜索 Canada 并且应用程序向用户显示文本 canada。 现在我想要,但是我可以找到复选框的文本。

这是如何工作的?

非常感谢!

最好的问候, 费边

.java

public class Home extends AppCompatActivity {

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

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if(s.toString().equals("")){
                    // reset listview (resette listview)
                    initList();
                }
                else{
                    // perform search
                    searchItem(s.toString());
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

    }


    public void searchItem(String textToSearch){
        for(String item:items){
            if(!item.contains(textToSearch)) {
                listItems.remove(item);
            }

        }
        adapter.notifyDataSetChanged();

    }

    public void initList(){
        items=new String[]{"Canada","China"};
        listItems=new ArrayList<>(Arrays.asList(items));
        adapter=new ArrayAdapter<String>(this,R.layout.list_item, R.id.txtitem, 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_home, 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);
    }
}

.xml

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Text"
        android:id="@+id/textview"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Buttontext"
        android:id="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />



    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtsearch"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="38dp"
        android:hint="search"
        />
        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"></ListView>




</RelativeLayout>

【问题讨论】:

    标签: javascript java android search checkbox


    【解决方案1】:

    这取决于您希望应用程序的外观,但是为了创建复选框列表,您可以简单地拥有一个包含这些复选框的垂直方向的 LinearLayout。

    实现取决于您的数据源是静态的还是动态的。

    静态: 如果你想创建一个复选框的静态列表,你可以简单地将它们添加到一个 LinearLayout(如下所示),然后将此 LinearLayout 添加到你的主布局(而不是 ListView):

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:id="@+id/layout_cbx" >
    
        <CheckBox
            android:id="@+id/cbx_canada"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Canada" />
    
        <CheckBox
            android:id="@+id/cbx_china"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="China"
            android:checked="true" />
    </LinearLayout>
    

    动态: 如果您希望动态创建复选框(这是常见情况),首先创建一个 LinearLayout 作为容器:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:id="@+id/layout_cbx" />
    

    然后在你的activity中添加复选框(例如,在initList之后添加以下内容到onCreate):

    LinearLayout layout = (LinearLayout)findViewById(R.id.layout_cbx);
            for(String item : items){
                CheckBox cbx = new CheckBox(this);
                cbx.setText(item);
                layout.addView(cbx);
            }
    

    编辑: 当您使用静态资源时,您的 searchItem 方法应该为每个复选框包含类似的内容:

    CheckBox cbx = (CheckBox)findViewById(R.id.cbx_china);
    cbx.setChecked(textToSearch == cbx.getText());
    cbx = (CheckBox)findViewById(R.id.cbx_canada);
    cbx.setChecked(textToSearch == cbx.getText());
    

    同样,我认为这不是最佳做法。

    【讨论】:

    • 动态复选框和非动态复选框有什么区别?
    • 动态加载意味着您​​在从源(本地/远程数据库、Web 界面等)接收数据后在运行时加载数据。静态意味着复选框不依赖外部资源,可以手动编写。无论如何,您也可以从硬编码列表中动态加载它,我认为这比在布局中手动编码要好。
    • 好的。非常感谢。请看我的新帖子。
    • 在哪里?我找不到它。请给我一个链接。
    • 我把这篇文章作为答案。
    【解决方案2】:
        you should add or change <CheckBox> according to your requirement for the output 
        like
    
        <!----Your java class---->
        <CheckBox android:id="@+id/checkbox1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Text"
                android:onClick="onCheckboxClicked"/>
    
        <!----Your java class---->
         public class Home extends AppCompatActivity {
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                 setContentView(R.layout.content_layout_id);
    
                 final CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);
                 if (checkBox.isChecked()) {
                     checkBox.setChecked(false);
    //Rest of your code
                 }
             }
         }
    

    【讨论】:

      【解决方案3】:

      我应该确切地改变什么? 请填写此代码并删除未使用的代码:

      CheckBox cbx = (CheckBox)findViewById(R.id.cbx_china);
      if (textToSearch == cbx.getText())
      cbx.setChecked(!cbx.isChecked());

      我很抱歉,但我现在很困惑。

      public class Home extends AppCompatActivity {
      
          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_home);
      // CheckBox
              final CheckBox checkBox = (CheckBox) findViewById(R.id.cbx_canada);
              if (checkBox.isChecked()) {
                  checkBox.setChecked(false);
                  
      
                  //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) {
      
                      }
      
                      @Override
                      public void onTextChanged(CharSequence s, int start, int before, int count) {
                          if (s.toString().equals("")) {
                              // reset listview (resette listview)
                              initList();
                          } else {
                              // perform search
                              searchItem(s.toString());
                          }
                      }
      
                      @Override
                      public void afterTextChanged(Editable s) {
      
                      }
                  });
      
              }}
      
      
          public void searchItem(String textToSearch){
              for(String item:items){
                  if(!item.contains(textToSearch)) {
                      listItems.remove(item);
                  }
      
              }
              adapter.notifyDataSetChanged();
      
          }
      
          public void initList(){
              items=new String[]{"Canada","China"};//////////////////////////////////////
              listItems=new ArrayList<>(Arrays.asList(items));
              adapter=new ArrayAdapter<String>(this,R.layout.activity_home, R.id.activity_home, listItems); // List item dazugefügt
              listView.setAdapter(adapter);
          }
      
          // Menüs //
      
          @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_home, 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);
          }
      }

      非常感谢! 最好的祝福, 费边

      【讨论】:

        猜你喜欢
        • 2018-11-21
        • 2013-09-14
        • 1970-01-01
        • 2022-12-10
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 2017-05-12
        • 1970-01-01
        相关资源
        最近更新 更多