我在MainActivity.java中编写了UI函数(如下所示)。现在,由于设计问题,我的要求是将这些函数与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>
答案 0 :(得分:1)
当您将Button的onClick声明为布局xml的一部分时,很难从Activity类范围中分离出来。
当您将视图的onClick声明为布局xml时,它将附加在该布局上调用setContentView()
的活动。因此,您必须在Activity本身中定义所有Button的点击方法。
现在,如果您想将此逻辑分离为设计模式问题,而不是从xml布局文件中删除onClick
,请将自定义onClick侦听器创建为不同的java类,并覆盖该类中的onClick,定义您的按钮&#39;在onCreate()
的Activity中,并将自定义onClick侦听器设置为这些按钮。
示例:(这只是一个示例,您可以使用代码和用例进行更改)
public class CustomOnClickListener implements View.OnClickListener{
private Context appContext;
public CustomOnClickListener(Context context)
{
appContext = context;
}
@Override
public void onClick(View arg0) {
switch(arg0.getId())
{
case R.id.button1:
// There is "Off" button On UI. Onclick event of the button, this function
// is called.
break;
}
}
}
现在,在您的活动中,
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));
}
答案 1 :(得分:1)
您可以先从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() { }
}