0

3 つのビューを持つメイン画面があります。上部に「GO」ボタンと EditText バー (すべて重み付けされた水平 LinearLayout にあります)、およびその下に 1 つの垂直 LinearLayout があります。この垂直方向の LinearLayout (current_actions_queue) に、ActionHolder オブジェクトを追加します。

ActionHolder オブジェクトは LinearLayout を拡張します。このクラス内で、ビューは xml からインフレートされます。xml のルートは、独自の機能を備えた別のLinaearLayout です。

ユーザーが GO ボタンを押すと、インスタンス化された ActionHolder が current_actions_queue に追加されます。それでも何も表示されません。1 日以上デバッグしましたが、何が間違っているのかまだわかりません。

ユーザーが GO を押すと、次のようになります。

   /**
    * Begins the action chosen by the user. Places the action in a view in the
    * main layout.
    * 
    * @param view
    */
   public void beginNewAction(View view) {
      EditText actionToBegin = (EditText) findViewById(R.id.action_to_begin);
      String actionName = actionToBegin.getText().toString();
      if (actionName.length() == 0)
         return;
      Action action = user.getDictionary().getAction(actionName.toUpperCase());

      if (currentActionsQueue.contains(action)) {
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         builder.setTitle("Action already started!");
         AlertDialog dialog = builder.create();
         dialog.show();
         return;
      }
      if (currentActionsQueue.size() == ActiveMenuActivity.MULTITASK_LIMIT) {
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         builder.setTitle("Multitask limit reached!");
         AlertDialog dialog = builder.create();
         dialog.show();
         return;
      }

      currentActionsQueue.add(action);

      ActionHolder holder = new ActionHolder(this);
      holder.initiate(action);
      LinearLayout currentActionsFrame = (LinearLayout) this.findViewById(R.id.current_action_queue_view);
      currentActionsFrame.addView(holder);
   }

ActionHolder クラスは次のとおりです。

public class ActionHolder extends LinearLayout {

   private Action action;
   private String timer;
   public static final int ACTION_TITLE = 0, ACTION_TIMER = 1,
         PAUSEANDPLAY_BTN = 2, FINISH_BTN = 3;
   private View view;



   public ActionHolder(Context context) {
      super(context);
   }



   public ActionHolder(Context context, AttributeSet attr) {
      super(context, attr);
   }



   public ActionHolder(Context context, AttributeSet attr, int defStyle) {
      super(context, attr, defStyle);
   }



   public void initiate(Action input) {
      this.setOrientation(LinearLayout.VERTICAL);
      this.setLayoutParams(new LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
      action = input;
      LayoutInflater inflater = LayoutInflater.from(getContext());
      view = inflater.inflate(R.layout.action_holder_layout, this, true);

      TextView actionTitle = (TextView) view
            .findViewById(com.tonimiko.mochi_bean.R.id.action_holder_title);
      actionTitle.setText(action.getActionName());
      actionTitle.setId(ActionHolder.ACTION_TITLE);

      TextView actionTimer = (TextView) view
            .findViewById(R.id.action_holder_timer);
      actionTimer.setId(ActionHolder.ACTION_TIMER);

      Button pauseBtn = (Button) view
            .findViewById(com.tonimiko.mochi_bean.R.id.pause_and_play_timer_btn);
      pauseBtn.setId(ActionHolder.PAUSEANDPLAY_BTN);

      Button finishBtn = (Button) view
            .findViewById(com.tonimiko.mochi_bean.R.id.finish_activity_button);
      finishBtn.setId(ActionHolder.FINISH_BTN);
   }



   @Override
   protected void onLayout(boolean changed, int l, int t, int r, int b) {
      // TODO Auto-generated method stub

   }

}

そして、すべての ActionHolder でインフレートされる XML は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/test_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/layout_margins"
    android:background="#90A0AA"
    android:orientation="vertical"
    android:padding="@dimen/layout_margins" >

    <LinearLayout
        android:id="@+id/action_holder_titlebar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="3" >

        <TextView
            android:id="@+id/action_holder_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="Action Title"
            android:textSize="@dimen/action_holder_title_size" />

        <TextView
            android:id="@+id/action_holder_timer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="right"
            android:text="0:00" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/action_holder_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/pause_and_play_timer_btn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Pause" />

        <Button
            android:id="@+id/finish_activity_button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Finish" />

    </LinearLayout>

</LinearLayout>

どんな助けでも大歓迎です。

4

1 に答える 1