0

任意の数の が取り込まれMainActivity extends FragmentActivityた を使用するアプリを構築しています。CalendarFragment extends FragmentShiftRowFragment extends Fragment

を に動的に追加するメソッドを構築したいと考えてShiftRowFragmentCalendarFragmentます。にShiftRowFragmentは、日付や時刻などの動的な値が含まれていStringます。

これが私のものCalendarFragment.javaです:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class CalendarFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        addDay();
        addDay();

        View v = inflater.inflate(R.layout.calendar_fragment, container, false);

        return v;
    }

    private void addDay() {

        ShiftRowFragment shiftFragment = new ShiftRowFragment();
        FragmentTransaction transaction = getChildFragmentManager()
                .beginTransaction();
        transaction.add(R.id.llShifts, shiftFragment).commit();

    }
}

ShiftRowFragment.java外観は次のとおりです。

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ShiftRowFragment extends Fragment {

    public static ShiftRowFragment newInstance(int index) {
        ShiftRowFragment f = new ShiftRowFragment();

        Bundle args = new Bundle();
        args.putInt("index", index);
        f.setArguments(args);

        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.shiftrow_fragment, container,
                false);

        // load calendar

        return view;
    }
}

率直に言って、私は読んだドキュメントについて混乱しています。newInstanceのメソッドで何かが起こるはずShiftRowFragmentですが、正確にはわかりません。現在のコードは、2 つの ShiftRow をデフォルト値 (shiftrow_fragment.xml ファイルで指定) で表示します。

最後に、このshiftrow_fragment.xmlファイルには、TextViews動的に入力する必要がある次のものが含まれています。

  • tvDateIconMonth- 「1 月」、「2 月」などの文字列値を保持します。

  • tvDateIconDay- 「月」、「火」などの文字列値を保持します。

  • tvExpiration- 「今日」、「明日」、「3 日後」などの文字列値を保持します。

  • LinearLayoutまた、 の子にアクセスできるように、上記を含む親のタグをTextViewsある種のインデックスに設定する必要がありますFragment

addDay()必要なことを行うためにメソッドを修正するにはどうすればよいですか?

4

1 に答える 1

0

メソッドaddDay()は次のようになります。

private void addDay(String date, String time) {

    ShiftRowFragment shiftFragment = ShiftRowFragment.newInstance(date, time);
    FragmentTransaction transaction = getChildFragmentManager()
            .beginTransaction();
    transaction.add(R.id.llShifts, shiftFragment).commit();

}

そして、あなたShiftRowFragment.javaは次のようになります:

public class ShiftRowFragment extends Fragment {

private static final String BUNDLE_DATE = "DATE"'
private static final String BUNDLE_TIME = "TIME"'

    public static ShiftRowFragment newInstance(String date, String time) {
        ShiftRowFragment f = new ShiftRowFragment();

        Bundle args = new Bundle();
        args.putString(BUNDLE_DATE, date);
        args.putString(BUNDLE_TIME, time);
        f.setArguments(args);

        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.shiftrow_fragment, container,
            false);

        // reference textviews etc.

        String date;
        String time;
        if(savedInstanceState != null) {
            date = savedInstanceState.getString(BUNDLE_DATE);
            time = savedInstanceState.getString(BUNDLE_TIME);
        }

        tvDateIconMonth.setText(date);
        // etc.

        return view;
     }
}

注:日付と時刻の計算をフラグメントで行いたいため、日付と時刻を文字列ではなく日付として渡す必要があると思います。たぶん私は間違っているかもしれませんが、 TextView について言及したので、そう思いますtvExpiration。私が正しい場合は、次のように変更StringDate、Date を渡してバンドルします。

i.putLong(BUNDLE_DATE, date.getTime());

そして、あなたはこのように断片的に日付を取得します:

Date d = new Date();
d.setTime(i.getLong(BUNDLE_DATE, -1));
于 2013-07-28T06:50:22.040 に答える