我有一个主应用程序,其中包含layout.xml中定义的按钮。
当我点击按钮时,我想调用位于另一个类中的方法,当我尝试在该类中创建一个TextView时,我必须为新的TextView(???)命令提供一个参数,并且我不知道该怎么做。
我认为这对你们来说是一个2秒的问题,而对我来说,这是一个艰难的问题。
以防万一,以下是代码的相关部分:
主要类的适用部分:
public class MainActivity extends Activity {
public DateAndTime cur_datetime = new DateAndTime();
public LongLat cur_longlat = new LongLat();
public int current_location_number = 0;
public ArrayList<LocationInfo> locations = null;
Button doSunButton;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addListenersForButtons();
dosomething();
}
public void addListenersForButtons()
{
doSunButton = (Button) findViewById(R.id.dosun_button_id);
doSunButton.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View arg0)
{
DoSun myDoSun = new DoSun();
Log.v("button", "Am I really calling from the button function...");
myDoSun.doSun2(locations, current_location_number);
} // end of dosun on click on dosun_id button
); // end of define listener
} // end of addListenersForButtons(0) method
}
调用方法的类:
package com.example.sunandmoon;
import java.util.ArrayList;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class DoSun extends Activity{
public void doSun2(ArrayList<LocationInfo> locations, int current_location_number)
{
//Log.v("doSun", "Am I really there!");
TextView textViewsunrise = new TextView(??????);
textViewsunrise = (TextView) findViewById(R.id.sunrise_id);
((TextView)textViewsunrise).setText("From DoSun2! " + locations.get(current_location_number).getnameGiven());
} // end of doSun(0) method
}
顺便说一句,我也想知道如何避免将两个参数current_location_numberv和ArrayList位置传递给doSun2方法,因为它们“应该是”全局变量(你可以看到我来自C ......)。 / p>
感谢您的帮助。
对你们各种各样的狂热者,是的,我试图找到答案......
答案 0 :(得分:2)
您的代码中存在多个问题。
不要使用从Activity
扩展的类,除了作为活动之外的其他内容! Activity
表示用户与之交互的单个以任务为中心的对象。宽松地,将应用中的每个屏幕视为Activity
。
“应该是全局的”。不,他们不应该。在Android中偶尔出现全局变量有意义的情况。这不是其中的一个。您不应该避免将参数传递给doSun2()
,因为它根据这些参数运行。使用全局变量将完全是反模式。
您想要正确创建的TextView
属于MainActivity
。它应该负责创建和管理它。要做到这一点,让DoSun中的方法获取参数(locations,currentLocationNumber)并让它返回某种类型的结构,其中包含在TextView
中创建MainActivity
所需的所有值。您可以在MainActivity
中创建一个帮助方法,该方法将doSun2()
返回的结构作为参数,并返回一个新的TextView
,可以添加到Activity
Layout
。
通常,只有活动应该创建和管理任何UI元素。
如果DoSun
确实应该是一个Activity,那么不要尝试通过它的构造函数创建它的实例。而是创建Intent
并使用startActivity
创建它。
所有这些都说,你应养成描述你想要实现的 的习惯,因为你的方法(我已经回复)可能不是正确的。
祝你好运!