【问题标题】:ListView or false method to get the resultListView 或 false 方法获取结果
【发布时间】:2020-05-23 18:42:20
【问题描述】:
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 {
  private int id;
  private String SizeName;

  public Size(int id, String sizeName) {
    this.id = id;
    SizeName = sizeName;
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }
  public String getSizeName() {
    return SizeName;
  }
  public void setSizeName(String sizeName) {
   SizeName = 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 {
  ListView sizeList;
  ListView activityList;
  ListView childrenList;
  Button button;
  public static final String TAG = "MyActivity";


  public void inItListViews() {
  sizeList= findViewById(R.id.sizeList);
  activityList= findViewById(R.id.activityList);
  childrenList= findViewById(R.id.childrenList);
}
public void dogMatches() {

  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_1,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_1,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_activated_1,children);
  this.childrenList.setAdapter(adapter3);

}
  public 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();
    }

  }
  public void buttonPressed() {
    button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        processResult();
      }
    });
  }

 private String yourBest(Size s, Activities a, Children c) {
    String doThis;
    if(s.getSizeName().equalsIgnoreCase("small")
        && a.getActivityName().equalsIgnoreCase("lazy")
        && c.getChildrenName().equalsIgnoreCase("like")){
      Toast.makeText(this,"Chihuahua",Toast.LENGTH_LONG).show();
      doThis="Chihuahua";
    }
    else if(s.getSizeName().equalsIgnoreCase("small")
        && a.getActivityName().equalsIgnoreCase("light active")
        && c.getChildrenName().equalsIgnoreCase("like")){
      doThis="Labrador";
    } else{
      doThis="Find a cat";
    }
    return  doThis;
  }


  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    inItListViews();
    dogMatches();
    buttonPressed();
  }

  @Override
  public void onClick(View v) {

  }

}

应用程序正在运行,但问题是我无法获得三个列表视图的结果。是 ListView 还是方法?按下按钮后,我只收到其他消息。也许有一些方法可以检查 listView,因为它们可能不是通过按下鼠标进行编码的。我真的被困住了,至少需要一些建议而不是现成的解决方案。

【问题讨论】:

    标签: java android listview


    【解决方案1】:

    不要使用getCheckedItemPosition()来获取选中列表项的位置,而是使用listView.setOnItemClickListener()

    因此您可以删除以下语句,并将 po1-pos3 设为全局字段

        int pos1= sizeList.getCheckedItemPosition();
        int pos2 = activityList.getCheckedItemPosition();
        int pos3 = childrenList.getCheckedItemPosition();
    
    

    如下:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        int pos1, pos2, pos3;
    
    
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        inItListViews();
        dogMatches();
        buttonPressed();
    
        sizeList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                pos1 = position;
            }
        });
    
        activityList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                pos2 = position;
            }
        });
    
    
        childrenList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                pos3 = position;
            }
        });
      }
    
    

    并获取一个位置的列表项:

    sizeList.getAdapter().getItem(pos1);
    activityList.getAdapter().getItem(pos2);
    childrenList.getAdapter().getItem(pos3);
    

    【讨论】:

      【解决方案2】:

      首先我认为不实现View.OnClickListener会更好,因为你不使用它。其次 - 您可以在以下位置设置断点:

      int pos1 = sizeList.getCheckedItemPosition();
      

      调试它,然后你会看到出了什么问题。 最后,我建议创建一个自定义界面,让您可以找出检查的位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多