0

我有一个类,它使用其他类来构建一个FrameLayout. 一个用于通过建筑物导航,另一个用于显示带有传感器的示意图,另一个用于显示传感器数据。我一次构建了整个框架,并希望使传感器数据在框架的传感器视图部分中可见。假设我有 5 个传感器,当我单击一个时,传感器视图会显示传感器数据。我可以让 5 个传感器视图框架相互叠加,使它们不可见,然后通过单击传感器使选择的一个可见。

我想问一下,是否可以使用更新方法更改LinearLayout包含s 的不同类中的内容?TextView

我已经尝试过了,但我的代码目前无法正常工作。

public static SensorBar Create_SensorBar_Layout(Context myContext, ObjectStructure objStruct, ObjectView objView, List<SensorDevice> listofCurrentSensordevices)
{   
// Init
    LinearLayout SensorBarLinearLayout = new LinearLayout(myContext);

    LinearLayout.LayoutParams layoutParamsSensorBar = new LinearLayout.LayoutParams(
            200, 653);
    layoutParamsSensorBar.setMargins(5, 5, 5, 5);

    SensorBarLinearLayout.setOrientation(LinearLayout.VERTICAL);
    SensorBarLinearLayout.setLayoutParams(layoutParamsSensorBar);
    SensorBarLinearLayout.setBackgroundResource(R.drawable.window_frame);
    SensorBarLinearLayout.setPadding(4,4,4,4);  

    LinearLayout SensorBarData = new LinearLayout(myContext);

    LinearLayout.LayoutParams layoutParamsSensorBarData = new LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    SensorBarData.setOrientation(LinearLayout.VERTICAL);
    SensorBarData.setLayoutParams(layoutParamsSensorBarData);

    //--- Button Headline ---
    Button buttonNavBarHeadline = new Button(myContext);
    buttonNavBarHeadline.setText("Sensordata");
    buttonNavBarHeadline.setTextColor(Color.BLACK);
    buttonNavBarHeadline.setBackgroundResource(R.layout.mainview_window_headline);
    buttonNavBarHeadline.setTextAppearance(myContext, R.style.headline3);

//Layout buildup
    SensorBarLinearLayout.addView(buttonNavBarHeadline);
    SensorBarLinearLayout.addView(SensorBarData);

    return new SensorBar(SensorBarLinearLayout, SensorBarData);

}

这是 Sensorbar,我希望通过单击传感器按钮动态换出 LinearLayout SensorBarData。

public void updateSensorBar(Context myContext, ObjectStructure objStruct, List<SensorDevice> listofCurrentSensordevices, int activeSensor)
{
LinearLayout linearlayoutSensorvalueTextviews = new LinearLayout(myContext);

... (additional Textviews for Sensordata, which get added with addview())

setSensorBarData(linearlayoutSensorvalueTextviews);
}

这由 OnClick 事件使用。

public void setSensorBarData(LinearLayout SensorBarData)    { this.dataSensorBar = SensorBarData; }

updateSensorBar 使用它来更新 LinearLayout。

我会很高兴有任何帮助。

4

1 回答 1

0

定义一个接口并使用回调让活动知道传感器已更新。

public Interface SensorUpdatedListener {
    void onSensorUpdated();
}

在您的 SensorBar 类中。

ArrayList<SensorUpdatedListener > listeners = new ArrayList<SensorUpdatedListener >();

...

public void setSensorUpdatedListener(SensorUpdatedListener listener){
    listeners.add(listener);
}

在您的传感器栏更新方法中:

for (SensorUpdatedListener listener:listeners){
   listener.onSensorUpdated();
}

在您的活动中:

public class Test extends Activity implements SensorUpdatedListener {

...

@Override
public void onCreate(Bundle savedInstanceState) 
{
    ...

    sensorBar.setSensorUpdatedListener(this);
    ...
}

public void onSensorUpdated(){
   // do whatever you need to do
}

您可以通过添加 removeSensorUpdatedListener 并检查您没有在 setSensorUpdatedListener 中添加两次相同的侦听器来改进 SensorBar 类。

于 2013-01-01T21:45:57.533 回答