0

他のクラスを使用して を構築するクラスがありますFrameLayout。1 つは建物内を移動するためのもの、もう 1 つは建物のセンサーを含む回路図を表示するためのもの、もう 1 つはセンサーデータを表示するためのものです。フレーム全体を一度構築し、フレームのセンサービュー部分にセンサーデータを表示したいと考えています。5 つのセンサーがあり、1 つをクリックすると、センサービューにセンサーデータが表示されるとします。5つのセンサービューフレームを重ねて非表示にし、センサーをクリックして選択したものを表示することができました。

update メソッドを使用して、別のクラスの sLinearLayoutを含むを変更することは可能ですか?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に同じリスナーを2回追加しないことを確認することで、SensorBarクラスを改善できます。

于 2013-01-01T21:45:57.533 に答える