我想制作一个可以通过很少的行列式创建结果的应用。就像我们有三个带有复选框的方法,然后从每个方法中选取一个一样,然后得到选择它们的结果。例如,从第一行开始懒惰,从下一台计算机开始懒惰,结果您需要办公室工作。
这可以使用带有数组适配器的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并覆盖其方法。现在,用两个ListViews创建UI-一个用于您的质量,另一个用于兴趣,如下所示。
现在,您的活动代码中使用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()是为您提供从列表视图中选择的值的方法(质量和利益的对象)
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。
package eu.andykrzemien.dog4u;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
class Size {
final int id;
private final String SizeName;
public Size(int id, String sizeName) {
this.id = id;
SizeName = sizeName;
}
public int getId() {
return id;
}
public String getSizeName() {
return SizeName;
}
public String toString(){
return getId()+" "+getSizeName();
}
}
class Activities {
private int id;
private String ActivityName;
public Activities(int id, String activityName) {
this.id = id;
ActivityName = activityName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getActivityName() {
return ActivityName;
}
public void setActivityName(String activityName) {
ActivityName = activityName;
}
public String toString() {
return getId()+ " "+getActivityName();
}
}
class Children {
private int id;
private String ChildrenName;
public Children(int id, String childrenName) {
this.id = id;
ChildrenName = childrenName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getChildrenName() {
return ChildrenName;
}
public void setChildrenName(String childrenName) {
ChildrenName = childrenName;
}
public String toString() {
return getId()+" "+getChildrenName();
}
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private final ListView sizeList;
private final ListView activityList;
private final ListView childrenList;
public MainActivity(ListView sizeList, ListView activityList,
ListView childrenList) {
this.sizeList = sizeList;
this.activityList = activityList;
this.childrenList = childrenList;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initListViews();
Button addButton = (Button) findViewById(R.id.button_result);
}
private static final String TAG = "MyActivity";
private void initListViews() {
Size s1 = new Size(1,"Miniature");
Size s2 = new Size(2,"Small");
Size s3 = new Size(3,"Medium");
Size s4 = new Size(4,"Large");
Size s5 = new Size(5,"Giant");
Size [] size = new Size[]{s1,s2,s3,s4,s5};
ArrayAdapter<Size> adapter1 = new ArrayAdapter<>(this, android.R.layout.simple_list_item_checked,size);
this.sizeList.setAdapter(adapter1);
Activities a1 = new Activities(1,"Lazy");
Activities a2 = new Activities(2,"Light Active");
Activities a3 = new Activities(3,"Very Active");
Activities[] activities = new Activities[]{a1,a2,a3};
ArrayAdapter<Activities> adapter2 = new ArrayAdapter<>(this, android.R.layout.simple_list_item_checked,activities);
this.activityList.setAdapter(adapter2);
Children c1 = new Children(1,"Like");
Children c2 = new Children(2,"Doesn't matter");
Children[] children = new Children[]{c1,c2};
ArrayAdapter<Children> adapter3 = new ArrayAdapter<>(this, android.R.layout.simple_list_item_checked,children);
this.childrenList.setAdapter(adapter3);
}
@Override
public void onClick (View v){
processResult();
}
private void processResult() {
Log.d(TAG,"Result button clicked");
int pos1= sizeList.getCheckedItemPosition();
int pos2 = activityList.getCheckedItemPosition();
int pos3 = childrenList.getCheckedItemPosition();
Size sSelected= (Size) sizeList.getItemAtPosition(pos1);
Activities aSelected=(Activities) activityList.getItemAtPosition(pos2);
Children cSelected=(Children) childrenList.getItemAtPosition(pos3);
if(sSelected!=null && aSelected!=null && cSelected!=null){
Log.d(TAG,"result "+ sSelected.getSizeName()+" : "+ aSelected.getActivityName()+ " " + cSelected.getChildrenName());
String petSeeker =yourBest(sSelected,aSelected,cSelected);
Toast.makeText(this,petSeeker,Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"Please Select Something",Toast.LENGTH_SHORT).show();
}
}
private String yourBest(Size sSelected, Activities aSelected,
Children cSelected) {
String doThis="";
if(sSelected.getSizeName().equalsIgnoreCase("Small")
&& aSelected.getActivityName().equalsIgnoreCase("Lazy")
&& cSelected.getChildrenName().equals("Like")){
doThis="Chihuahua";
}
else if(sSelected.getSizeName().equalsIgnoreCase("Medium")
&& aSelected.getActivityName().equalsIgnoreCase("Light Active")
&& cSelected.getChildrenName().equalsIgnoreCase("Like")){
doThis="Labrador";
}
///
else{
doThis="Find a cat";
}
return doThis;
}
}