繁体   English   中英

我可以创建自己的 .toString() 函数吗?

[英]Can I create my own .toString() function?

如何在 vigiltime.setText 中显示对象的另一个字段? 我希望它显示来自 parishArrayList 的对象中时间字段的特定相关值? parent.getItemAtPosition(position) 已经检索到特定对象,那么我怎样才能让它解析 onItemSelected 方法中的相关对象详细信息?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    parishArrayList = new ArrayList<>();
    parishArrayList.add(new Parish(1, "Aghyaran", "Termonamongan, N.West Tyrone", "6.30pm", "10.00am"));
    parishArrayList.add(new Parish(2, "Castlederg", "Castlederg, N.West Tyrone", "7pm", "11.00am"));
    parishArrayList.add(new Parish(3, "Strabane", "Strabane, N.West Tyrone", "8pm", "12.00am"));

    Spinner parishSpinner = (Spinner) findViewById(R.id.spinner);

    // Create an ArrayAdapter using the parishArrayList and a default spinner layout
    ArrayAdapter<Parish> parishAdapter = new ArrayAdapter<Parish>(getApplicationContext(), android.R.layout.simple_spinner_item, parishArrayList);

    // Specify the layout to use when the list of choices appears
    parishAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // Apply the adapter to the spinner
    parishSpinner.setAdapter(parishAdapter);

    parishSpinner.setOnItemSelectedListener(this);
}
@Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    TextView vigiltime = (TextView) findViewById(R.id.vigiltime);
    vigiltime.setText("Spinner selected : ");
    vigiltime.setText(vigiltime.getText() + parent.getItemAtPosition(position).toString());

}

教区.java

public class Parish {

private int parishIdNumber;
private String pName;
private String pAddress;
private String pVigilTimes;
private String pSundayTimes;

public Parish(int id, String name, String address, String vigilTimes, String sundayTimes) {
    parishIdNumber = id;
    pName = name;
    pAddress = address;
    pVigilTimes = vigilTimes;
    pSundayTimes = sundayTimes;
}

public int getId() {
    return parishIdNumber;
}

public void setId(int id) {
    parishIdNumber = id;
}

public String getName() {
    return pName;
}

public void setName(String name) {
    pName = name;
}

public String getAddress() {
    return pAddress;
}

public void setAddress(String address) {
    pAddress = address;
}

public String getVigilTimes() {
    return pVigilTimes;
}

public String getsundayTimes() {
    return pSundayTimes;
}

public int getParishIdNumber() {
    return parishIdNumber;
}

public void setParishIdNumber(int parishIdNumber) {
    this.parishIdNumber = parishIdNumber;
}

@Override
public String toString() {
    return pName;
}

}

您不需要使用toString() 您可以简单地调用教区类的相关函数或变量:

Parish item = parent.getItemAtPosition(position);
vigilTime.setText("Spinner selected : ");
vigilTime.append(item.getTime() + " "); //append has the same effect as what you're currently doing
vigilTime.append(item.getSomethingElse + " ");
//etc

如果您只想使用toString() ,请在您的教区类中覆盖它:

@Override 
public String toString() {
    return /* format the String you want returned here */
}

编辑:回答你的实际问题:

ViewAdapter#getItemAtPosition()返回一个对象,而不是您的特定类。 你需要把这个电话投给教区:

Parish item = (Parish) parent.getItemAtPosition(position);

然后你可以调用item.getVigilTimes(); .

覆盖要更改字符串表示形式的类中的 toString 方法。

@Override
public String toString() {
    //TODO - Here.
}

您可以通过如下所示的类的公共方法访问对象的任何私有变量。

vigiltime.setText(vigiltime.getText() + ((Parish)parent.getItemAtPosition(position)).getVigilTimes());

您还可以覆盖 toString() 方法以显示 VigilTimes 并调用 parent.getItemAtPosition(position).toString()。

@Override
public String toString() {
    return pVigilTimes;
}

toString() 方法继承自 Java 中所有其他类都继承自的对象类。 基础的 toString() 返回这个: getClass().getName() + '@' + Integer.toHexString(hashCode())

字符串类,如果你正在创建一个新的字符串对象,比如 String

first_name = 'someFirstName' 

实际上用构造函数创建了一个实例,

String first_name = new String("someFristName") 

并且此类再次覆盖对象 toString() 方法。

Oracle 的文档说到 String 类中的 toString(),这个对象(它已经是一个字符串!)本身是返回的。

创建或构建的每个类都直接或间接从 Object 类继承,该类具有基本的 toString() ,可以在当前类中覆盖它。 就这么简单...

 @Override
 public String toString(){
      //to do logic here
 }

您覆盖的 toString() 只不过是您的 getName() 方法。 考虑是否有必要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM