Java 在Android中调用MainActivity之外的UI函数
我已经在MainActivity.java中编写了UI函数(如下所示)。现在,由于设计问题,我的要求是将这些函数与Java 在Android中调用MainActivity之外的UI函数,java,android,android-layout,Java,Android,Android Layout,我已经在MainActivity.java中编写了UI函数(如下所示)。现在,由于设计问题,我的要求是将这些函数与MainActivity.java分离,并写入其他文件,然后这些函数将与UI元素交互。如何将UI函数与MainActivity.java分开 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) {
MainActivity.java
分离,并写入其他文件,然后这些函数将与UI元素交互。如何将UI函数与MainActivity.java
分开
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
// There is "Off" button On UI. Onclick event of the button, this function
// is called.
public void OffCommandInterface(View view) {
}
// There is "SetTemp" button On UI. Onclick event of the button,
//this function reads data from textbox and send data to other module.
public void SetTempCommandInterface(View view) {
}
// There is "SetTemp" button On UI. Onclick event of the button,
//this function reads data from textbox and send data to other module.
public void profileRequestInterface(View view){
}
}
我附上activity_main.xml文件以供参考
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="72dp"
android:onClick="profileRequestInterface"
android:text="@string/button_send" />
</LinearLayout>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Switch Off Heater"
android:onClick="OffCommandInterface" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/edit_temp"
android:layout_width="136dp"
android:layout_height="wrap_content" >
</EditText>
<Button
android:id="@+id/temp"
android:layout_width="wrap_content"
android:layout_height="72dp"
android:onClick="SetTempCommandInterface"
android:text="SetTemp" />
</LinearLayout>
</LinearLayout>
当您声明按钮的onClick是布局xml的一部分时,很难从活动类范围中分离出来 当您将视图的onClick声明为布局xml时,它将附加到在该布局上调用
setContentView()
的活动。因此,您必须在活动本身中定义所有按钮的单击方法
现在,如果您想将此逻辑作为设计模式问题分离出来,而不是从xml布局文件中删除onClick
,将自定义onClick侦听器创建为不同的java类并重写该类中的onClick,在活动的onCreate()
中定义按钮,并将自定义onClick侦听器设置为这些按钮
示例:(这只是一个示例,您可以使用代码和用例进行更改)
现在,在你的活动中
public class MainActivity extends Activity {
Button buttonOff;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonOff = (Button)findViewById(R.id.button1);
buttonOff.setOnClickListener(new CustomOnClickListener(this));
}
您可以首先从XML中删除
android:onClick
,并在代码中处理它。除了为了学习,我从来没有理解过这种做法。这应该让你开始
public class MainActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
this.OffCommandInterface();
break;
default:
break;
}
private void OffCommandInterface() { }
private void SetTempCommandInterface() { }
private void profileRequestInterface() { }
}
创建另一个类并从
onClick()
s调用这些函数?你的问题很广泛,谢谢你的指点!对我来说,按钮的onClick作为布局xml文件的一部分不是强制性的。我可以更改我的activity_main.xml文件。请您提供一个更清晰的代码建议好吗?这个解决方案现在可以工作了。非常感谢您的时间和努力!
public class MainActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
this.OffCommandInterface();
break;
default:
break;
}
private void OffCommandInterface() { }
private void SetTempCommandInterface() { }
private void profileRequestInterface() { }
}