链接几个复选框以获得某些结果

Linking few checkboxes to get result of something

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

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

中找出
    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();
    }
  }

您将使用这些 classes 来绑定到您的列表 views.For 在这里很简单 我已经实现了 toString 方法以便我们可以将它附加到 arrayAdapter easily.Other 明智的你将拥有创建自定义布局并创建另一个 class 将扩展 ArrayAdapter 并覆盖其方法。 现在用两个 ListView 创建 UI - 一个用于您的品质,另一个用于兴趣,如下所示

现在在你的 activity 代码中使用 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() 是为您提供从列表视图(质量和兴趣对象 resp.)中选择的值的方法

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。