在“主”类之外的另一个类中定义textview

时间:2013-04-17 15:04:09

标签: android eclipse textview

我有一个主应用程序,其中包含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>

感谢您的帮助。

对你们各种各样的狂热者,是的,我试图找到答案......

1 个答案:

答案 0 :(得分:2)

您的代码中存在多个问题。

  1. 不要使用从Activity扩展的类,除了作为活动之外的其他内容! Activity表示用户与之交互的单个以任务为中心的对象。宽松地,将应用中的每个屏幕视为Activity

  2. “应该是全局的”。不,他们不应该。在Android中偶尔出现全局变量有意义的情况。这不是其中的一个。您不应该避免将参数传递给doSun2(),因为它根据这些参数运行。使用全局变量将完全是反模式。

  3. 您想要正确创建的TextView属于MainActivity。它应该负责创建和管理它。要做到这一点,让DoSun中的方法获取参数(locations,currentLocationNumber)并让它返回某种类型的结构,其中包含在TextView中创建MainActivity所需的所有值。您可以在MainActivity中创建一个帮助方法,该方法将doSun2()返回的结构作为参数,并返回一个新的TextView,可以添加到Activity Layout

  4. 通常,只有活动应该创建和管理任何UI元素。

  5. 如果DoSun确实应该是一个Activity,那么不要尝试通过它的构造函数创建它的实例。而是创建Intent并使用startActivity创建它。

  6. 所有这些都说,你应养成描述你想要实现的 的习惯,因为你的方法(我已经回复)可能不是正确的。

    祝你好运!