Class 组织从 Android 片段 class 访问抽象方法
Class organization to access abstract method from Android fragment class
我不太确定我的问题陈述是什么,正如您从标题中看出的那样。我有一个扩展 Activity 的抽象 class A。 Class A 定义了一个抽象方法:
public abstract class A extends Activity {
ActionBar.Tab devicesTab, otherTab;
Fragment fragmentTab = new FragmentTab();
protected abstract void connectBluetooth(BluetoothDevice deviceToConnect);
}
实现connectBluetooth(BluetoothDevice deviceToConnect)的class扩展Class A:
public class MainActivity extends A {
@Override
protected void connectBluetooth(BluetoothDevice deviceToConnect)
{
Intent intent = new Intent(this, bActivity.class);
intent.putExtra(BluetoothDevice.EXTRA_DEVICE, deviceToConnect);
this.startActivity(intent);
}
}
在 class A 我有一个 Fragment,它有自己的 class,class FragmentTab extends Fragment。此 class 包含允许用户 select 连接设备的 UI。我需要将该设备传递给 class A 或有权访问 connectBluetooth(BluetoothDevice deviceToConnect) 以便主要 activity 可以从它开始。我已经尝试使用 "wrapper" 方法,但它总是导致方法需要是静态的,这不允许我使用 connectBluetooth(BluetoothDevice deviceToConnect) 因为它是一个抽象的受保护方法。
我该怎么做才能解决这个问题?它需要另一个 class 吗?或者我只是错过了什么?
谢谢!
我需要从 Fragment 创建一个事件回调到我的 activity。在西蒙的评论之后,谢谢西蒙,我研究了Fragments、接口和回调。这解决了我的问题,但我同意可以重新设计设计。
在 FragmentTab 中 class 我需要一个界面:
OnDeviceSelectedListener mDeviceListener;
public interface OnDeviceSelectedListener
{
public void onDeviceSelected(BluetoothDevice deviceToConnect);
}
此外,需要将其附加到 activity:
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
try
{
mDeviceListener = (OnDeviceSelectedListener)activity;
}
catch (ClassCastException e)
{
throw new ClassCastException(activity.toString() + "must implement OnDeviceSelectedListner");
}
}
之后 OnItemClickListener 调用在 class A 中实现的 OnDeviceSelected 方法。
... mDeviceListener.onDeviceSelected(deviceToConnect);
Class 实现方法的A必须有"implements"描述:
public abstract class A extends Activity implements FragmentTab.OnDeviceSelectedListener
{ ...
}
最后是 class A:
中的实现
public void onDeviceSelected(BluetoothDevice deviceToConnect)
{
connectBluetooth(deviceToConnect);
}
我不太确定我的问题陈述是什么,正如您从标题中看出的那样。我有一个扩展 Activity 的抽象 class A。 Class A 定义了一个抽象方法:
public abstract class A extends Activity {
ActionBar.Tab devicesTab, otherTab;
Fragment fragmentTab = new FragmentTab();
protected abstract void connectBluetooth(BluetoothDevice deviceToConnect);
}
实现connectBluetooth(BluetoothDevice deviceToConnect)的class扩展Class A:
public class MainActivity extends A {
@Override
protected void connectBluetooth(BluetoothDevice deviceToConnect)
{
Intent intent = new Intent(this, bActivity.class);
intent.putExtra(BluetoothDevice.EXTRA_DEVICE, deviceToConnect);
this.startActivity(intent);
}
}
在 class A 我有一个 Fragment,它有自己的 class,class FragmentTab extends Fragment。此 class 包含允许用户 select 连接设备的 UI。我需要将该设备传递给 class A 或有权访问 connectBluetooth(BluetoothDevice deviceToConnect) 以便主要 activity 可以从它开始。我已经尝试使用 "wrapper" 方法,但它总是导致方法需要是静态的,这不允许我使用 connectBluetooth(BluetoothDevice deviceToConnect) 因为它是一个抽象的受保护方法。
我该怎么做才能解决这个问题?它需要另一个 class 吗?或者我只是错过了什么?
谢谢!
我需要从 Fragment 创建一个事件回调到我的 activity。在西蒙的评论之后,谢谢西蒙,我研究了Fragments、接口和回调。这解决了我的问题,但我同意可以重新设计设计。
在 FragmentTab 中 class 我需要一个界面:
OnDeviceSelectedListener mDeviceListener;
public interface OnDeviceSelectedListener
{
public void onDeviceSelected(BluetoothDevice deviceToConnect);
}
此外,需要将其附加到 activity:
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
try
{
mDeviceListener = (OnDeviceSelectedListener)activity;
}
catch (ClassCastException e)
{
throw new ClassCastException(activity.toString() + "must implement OnDeviceSelectedListner");
}
}
之后 OnItemClickListener 调用在 class A 中实现的 OnDeviceSelected 方法。
... mDeviceListener.onDeviceSelected(deviceToConnect);
Class 实现方法的A必须有"implements"描述:
public abstract class A extends Activity implements FragmentTab.OnDeviceSelectedListener
{ ...
}
最后是 class A:
中的实现public void onDeviceSelected(BluetoothDevice deviceToConnect)
{
connectBluetooth(deviceToConnect);
}