如何从另一个类访问另一个类函数(java)

时间:2017-04-06 04:54:36

标签: java android android-studio

我是java的新手,我目前正在android studio中测试它。

我试图从 TEST2 类中的 TEST 类中访问 showMessage()函数。

如果在同一个类中调用 showMessage()函数,但是如果我尝试从另一个类访问它,代码就会停止,这没有问题。

也许我的逻辑或语法有问题,但我不完全确定它是哪一个。我已经尝试过寻找一些解决方案,但我找不到可以帮助解决问题的答案。

这是我的TEST.java代码

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class TEST extends AppCompatActivity {
    public TEST2 ab;
    Button button;

    private final String text ="Testing test test test testing test";

    public void showMessage(String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(message)
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                    }
                })
                .setCancelable(false) // cancel with button only
                .show();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        button = (Button) findViewById(R.id.buttontest);

        ab = new TEST2(this);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showMessage(text);
            }
        });
    }

}

class TEST2 extends View{
    public TEST t = new TEST();

    public TEST2(Context context) {
        super(context);

    //there is error if I tried this 2 line code
    //onTest();     
    //t.showMessage("TESTING FROM TEST2 CLASS");

    }

    public void onTest(){
        t.showMessage("TESTING FROM TEST2 CLASS");
    }
}

这是我的 activity_test.xml布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/buttontest"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

4 个答案:

答案 0 :(得分:1)

您可以通过传递参数上下文

来完成此操作
public void showMessage(String message, Context context) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setMessage(message)
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                    }
                })
                .setCancelable(false) // cancel with button only
                .show();
}

答案 1 :(得分:1)

警报对话框是一个UI元素,如果更改了活动,它将不会从另一个类运行。如果活动没有改变,试试这个......

<script type="text/javascript">
$( document ).ready(function() {
$('#employee_grid').DataTable({
             "bProcessing": true,
     "serverSide": true,
     "ajax":{
        url :"run.php", // json datasource

        data:function(d){ //use for pass addtional parameter 
         d.user_id="your user id";
          },

        type: "post",  // type of method  , by default would be get
        "aoColumnDefs" : [
             {
               'bSortable' : false,
               'aTargets' : [3,4]
             }],
        "dataSrc": function (jsonData) {
          for ( var i=0, len=jsonData.data.length ; i<len ; i++ ) {
            jsonData.data[i][1] = jsonData.data[i][1]+jsonData.data[i][2]+jsonData.data[i][3]+jsonData.data[i][4];
            jsonData.data[i][8] = '<a href="cus_details.php"  class="btn btn-primary btn-xs"> View Details </a>   <a href="update_details.php" class="btn btn-primary btn-xs"> Update Status </a>';
          }

          return jsonData.data;
        },
        error: function(){  // error handling code
         // $(".employee-grid-error").html("");
          //$("#employee_grid").append('<tbody class="employee-grid-error">            <tr><th colspan="3">No data found in the server</th></tr></tbody>');
          $("#employee_grid_processing").css("display","none");
        }
      }
    });   
});

</script>

答案 2 :(得分:0)

public void onTest(){
        if (getContext() instanceof Test)
            ((Test)getContext()).showMessage("TESTING FROM TEST2 CLASS");
    }

答案 3 :(得分:0)

只需通过Context课程的TEST2

 public void showMessage(Context context, String message) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    .............
    ......................
 }

<强> TEST2:

public TEST2(Context context) {
    super(context);

    t.showMessage(context, "TESTING FROM TEST2 CLASS");
}