【问题标题】:Updating LinearLayout from other class in Android从 Android 中的其他类更新 LinearLayout
【发布时间】:2012-12-16 08:35:15
【问题描述】:

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

我想问,是否可以使用更新方法在不同的类中更改包含TextViews 的LinearLayout

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

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。

我很乐意提供任何帮助。

【问题讨论】:

    标签: android class dynamic android-linearlayout


    【解决方案1】:

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

    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 类。

    【讨论】:

    • 哇,太好了,我明天会研究一下。感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多