如何从 Android 4.3 中的类(此类扩展 LinearLayout)启动 Activity?

Posted

技术标签:

【中文标题】如何从 Android 4.3 中的类(此类扩展 LinearLayout)启动 Activity?【英文标题】:How to start Activity from a class( this class extends LinearLayout ) in Android 4.3? 【发布时间】:2013-11-20 09:54:38 【问题描述】:

我有两个班级,一个是public class range extends LinearLayout

另一个是public class Main extends Activity

Main 中,我使用 MyWindowManager.createBigWindow(getApplicationContext()); 来调用 range 类

范围类:

public class Out_of_range extends LinearLayout 

    public static int viewWidth;
    public static int viewHeight;

    public Out_of_range(final Context context) 
        super(context);
        // TODO Auto-generated constructor stub
        LayoutInflater.from(context).inflate(R.layout.out_of_range, this);
        View view = findViewById(R.id.big_window_layout);
        viewWidth = view.getLayoutParams().width;
        viewHeight = view.getLayoutParams().height;


        TextView text = (TextView)findViewById(R.id.text);
        text.setText("loss :"+ Main.tempAddress);

        Button back = (Button)findViewById(R.id.back);

        back.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View v) 
                    // TODO Auto-generated method stub
/*----------------------------------------------------------------------------------------------
                               //I want to start Activity when I click the button here.

                    final Intent mainintent = new Intent(getContext(), Main.class);
                startActivity(mainintent);

*/-----------------------------------------------------------------------------------------------
                
            );

        

我想从一个类开始 Activity(这个类扩展了 LinearLayout)

我使用了 intent ,但它有错误。

未定义类型 new View.OnClickListener()

的方法 startActivity(Intent)

【问题讨论】:

你不能重写你的范围类中的构造函数来把你的字符串值作为参数吗?或者你也可以在你的范围类中添加一个字符串值,并使用 getter/setter 访问它。 @DamienR.:sorry...第一个问题我听不懂。 【参考方案1】:

你可以让你的方法 createBigWindow 返回它刚刚创建的范围对象

public static Out_of_range createBigWindow(Context context) 
    WindowManager windowManager = getWindowManager(context);
    int screenWidth = windowManager.getDefaultDisplay().getWidth();
    int screenHeight = windowManager.getDefaultDisplay().getHeight();
    if(bigWindow == null) 
        bigWindow = new Out_of_range(context);
        if(bigWindowParams == null) 
            bigWindowParams = new LayoutParams();
            bigWindowParams.x = screenWidth / 2 - Out_of_range.viewWidth / 2;
            bigWindowParams.y = screenHeight / 2 - Out_of_range.viewHeight / 2;
            bigWindowParams.type = LayoutParams.TYPE_PHONE;
            bigWindowParams.format = PixelFormat.RGBA_8888;
            bigWindowParams.gravity = Gravity.LEFT | Gravity.TOP;
            bigWindowParams.width = Out_of_range.viewWidth;
            bigWindowParams.height = Out_of_range.viewHeight;

        
        windowManager.addView(bigWindow, bigWindowParams);
    

    return bigWindow;

然后在你的 Out_of_range 类中创建一个方法来接收你想要传递的字符串。

编辑:

//in your Out_of_range class

public void receiveStringValue(String value) 
  // do whatever you want 

并在使用 createBigWindow 方法后从 Main 类中使用它:

Out_of_range range = MyWindowManager.createBigWindow(this);
range.receiveStringValue(yourString);

我没有尝试过,但我认为值得一试。

编辑2:

既然您已经更新了问题,那就更清楚了:试试这个:

public class Out_of_range extends LinearLayout 

public static int viewWidth;
public static int viewHeight;

public Out_of_range(final Context context, String value) 
    super(context);
    // TODO Auto-generated constructor stub
    LayoutInflater.from(context).inflate(R.layout.out_of_range, this);
    View view = findViewById(R.id.big_window_layout);
    viewWidth = view.getLayoutParams().width;
    viewHeight = view.getLayoutParams().height;


    device = (TextView) findViewById(R.id.device);
    device.setText("device = " + value);


    Button back = (Button)findViewById(R.id.back);

    back.setOnClickListener(new OnClickListener() 

        @Override
        public void onClick(View v) 
            // TODO Auto-generated method stub
            MyWindowManager.removeBigWindow(context);
        
    );


在你的主要,做这样的事情:

MyWindowManager.createBigWindow(getApplicationContext(), "your value here");

【讨论】:

但我想从 Main.class 接收值并显示在 out_of_range 类上。 我不确定我是否完全理解,你的 Main 类中有一个 String 值,你想将它传递给你的 out_of_range 类,这样它就可以以某种方式显示它,对吧? 我已经通过使用全局变量解决了这个问题,但是还有一个问题。如何在范围类中启动 Main Activity ?? 不确定你为什么要这样做,但使用上下文你可以做 context.startActivity(...)【参考方案2】:

我在 Main.class 中定义了字符串,例如 public static String tempName;

在范围类中,使用Main.tempName 获取值。

【讨论】:

以上是关于如何从 Android 4.3 中的类(此类扩展 LinearLayout)启动 Activity?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法创建从Android中的Canvas扩展的类?

***Error关于为android中的类编写Parcelable

使用Android中的内容提供程序公开多个表的最佳实践

调用扩展 UiApplication 并从 Blackberry 中的主线程实现 Runnable 的类

如何将值从活动传递到 Android Studio 中的类?

如何从扩展 JobService 的类中调用将视图作为参数的 MainActivity 方法?