[英]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.