【问题标题】:Linking few checkboxes to get result of something链接几个复选框以获得某些结果
【发布时间】:2020-05-22 14:21:49
【问题描述】:

我想制作一个应用程序,它可以从几个决定因素中创建结果。就像我们有三个带有复选框的方法,我们从每个方法中取一个,然后我们得到选择它们的结果。例如,从第一行开始偷懒,从下一台计算机开始,结果你需要一份办公室工作。

【问题讨论】:

    标签: java android checkbox android-checkbox


    【解决方案1】:

    这可以使用带有数组适配器的 Android ListView 来实现。 您可以从根据需要创建 pojo 开始。例如,您可以根据您的特定需求创建以下两个类,我可以从问题中找出这些类

        Class Qualities { 
            private int id;
            private string QualityName;
            ...
    
            getId(){...}
            setId(int id){...}
            getQualityName(){}
            //etc get and set methods
    
        //toString
        public String toString(){
          return getId()+" "+getQualityName();
        }
      }
    
         Class Intrests{
            private int id;
            private String InterestName;
    
            ...
            // all get and set methods
            ....
    
        //toString
        public String toString(){
          return getId()+" "+getIntrestName();
        }
      }
    

    您将使用这些类绑定到您的列表视图。为简单起见,我在这里实现了 toString 方法,以便我们可以轻松地将其附加到 arrayAdapter。否则,您将必须创建自定义布局并创建另一个类扩展 ArrayAdapter 并覆盖其方法。 现在创建带有两个 ListView 的 UI - 一个用于您的 Qualities,另一个用于 Interests,如下所示

    现在在您的活动代码中使用 arrayAdapter 填充两个列表视图

    @Override
        protected void onCreate(Bundle savedInstanceState) {
    .....
    ....
    initListViews();
    }
    
    private void initListViews() {
    
            // create items
            //List view 1
            Qualities q1= new Qualities(1,"Lazy");
            Qualities q2= new Qualities(2,"Hard working");
            Qualities q3= new Qualities(3,"Witty");
    
            Qualities [] qualities= new Qualities[]{q1,q2,q3};
            // Array adapter
            ArrayAdapter<Qualities> adapter1= new ArrayAdapter<Qualities>(this,android.R.layout.simple_list_item_checked,qualities);
            this.listView.setAdapter(adapter1);
    
            //list view 2
            Intrests i1= new Intrests(1,"Computer");
            Intrests i2= new Intrests(2,"Sports");
            Intrests i3= new Intrests(3,"Commerce");
    
            Intrests[] interests = new Intrests[]{i1,i2,i3};
            // Array adapter
            ArrayAdapter<Intrests> adapter2= new ArrayAdapter<Intrests>(this,android.R.layout.simple_list_item_checked,interests);
            this.listView2.setAdapter(adapter2);
        }
    

    这样您将获得两个列表视图,其中包含您在数组中输入的值。 现在,为了简单起见,我使用一个按钮来处理结果。

    button_result.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   processResult();
               }
    
           });
    

    其中 processResult() 是从列表视图(Qualities 和 Interests 的对象)中为您提供所选值的方法

    private void processResult() {
            Log.d(TAG,"Result button clicked");
    
            int pos1= listView.getCheckedItemPosition();
            int pos2 = listView2.getCheckedItemPosition();
    
            Qualities qSelected= (Qualities) listView.getItemAtPosition(pos1);
            Intrests iSelected=(Intrests) listView2.getItemAtPosition(pos2);
            if(qSelected!=null && iSelected!=null){
                Log.d(TAG,"result "+ qSelected.getQualityName()+" : "+ iSelected.getInterestName());
    
                String iAmDoingThis =tellMeWhatShouldIDo(qSelected,iSelected);
    
                Toast.makeText(this,iAmDoingThis,Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(this,"Please Select Something",Toast.LENGTH_SHORT).show();
            }
        }
    

    下面的 tellMeWhatShouldIDo() 实现了简单的逻辑来满足您的需求,您必须即兴发挥这种方法才能真正满足您的需求。

        private String  tellMeWhatShouldIDo(Qualities q,Intrests i){
                String doThis="";
                if(q.getQualityName().equalsIgnoreCase("lazy") && i.getInterestName().equalsIgnoreCase("computer")){
                    doThis="You should do office job";
                }
                else if(q.getQualityName().equalsIgnoreCase("hard working") && i.getInterestName().equalsIgnoreCase("sports")){
                    doThis="You should play football";
                }
    ///..... generalize here to other cases
    ///
                else{
                    doThis="Chill and relax";
                }
                return  doThis;
            }
    

    就是这样。希望这可以帮助。 PS。为了简单起见,我没有在这段代码中处理 NullPointerException。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多