包含动态内容的片段

时间:2015-10-30 10:55:49

标签: android android-fragments

我如何开发一个他内容动态的片段? 例如。片段的默认内容为三<Button>,具体取决于片段的活动,片段只能有两个<button>或只有一个<button>可见。

如何控制内容的“条件可见性”?

此外,还有一种方法可以根据活动状态控制按钮的“条件可见性”吗?

制作它的最佳方法是什么?我可以使用所有按钮创建片段xml并控制它们在活动中的可见性吗?或者我通过活动或片段本身插入并删除按钮?

对不起我的英语,我是巴西用户。

3 个答案:

答案 0 :(得分:2)

首先,您在布局中声明所需的所有按钮。 然后根据您的要求,您可以在片段代码中动态设置该特定按钮的可见性参数。

类似的东西:

View b = findViewById(R.id.button);
b.setVisibility(View.GONE);

您还可以在此处查看有关构建灵活用户界面的一些指导原则:

http://developer.android.com/intl/es/training/basics/fragments/fragment-ui.html

答案 1 :(得分:1)

片段可以使用newInstance方法,您可以使用该方法使用您希望的参数创建片段的新实例,这样您就可以将布尔数组传递给newInstance方法,您可以从中设置按钮的可见性

newInstance方法将标志推送到bundle。

public static final String ARG_BUTTON_VISIBILITY_FLAGS = "visibility_flags";

public static MyFragment newInstance(Boolean[] param1) {
    AboutUsFragment fragment = new AboutUsFragment();
    Bundle args = new Bundle();
    args.putBooleanArray(ARG_BUTTON_VISIBILITY_FLAGS, param1);
    fragment.setArguments(args);
    return fragment;
}

您可以在片段的onCreate中访问此数据。像这样

private Boolean[] mVisibilityFlags;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mVisibilityFlags = getArguments().getBooleanArray(ARG_BUTTON_VISIBILITY_FLAGS);
    }
}

而不是像MyFragment fragment = new MyFragment()那样实例化你的片段,而是像MyFragment myFragment = MyFragment.newInstance(buttonVisibilityFlags);那样实例化它,这样你就可以成功地将标志传递给你的片段了。

现在根据视图中按钮的位置,相应地设置其可见性,如果按钮位置为3,则执行button3.setVisibility(mVisibilityFalgs[3])

答案 2 :(得分:0)

如果碎片的细节不同,只需创建两个(或更多)碎片。

让片段知道要显示什么的最好方法是使用参数。关于那个Here's an article。基本上,活动会添加一个像“DISPLAY_FULL”这样的参数:true或false,然后从// all arrays are from http JSON get - data is working fine no issues with the data, only issue with the binding ng-model inside the ng-repeat .controller('SomeCtrl', function($scope, $http) { $scope.someArr = {}; $http.get('someURL?token='+auth.authtoken) .success(function(res){ $scope.someArr = res; }); // OR if you want to see the data $scope.someArr = [ {"id":"1", "value":"a"}, {"id":"2", "value":"b"}, {"id":"3", "value":"b"} ] $scope.someOtherArr = [ {"id":"1", "value":"a", "data":"X"}, {"id":"2", "value":"b", "data":"Y"}, {"id":"3", "value":"b", "data":"Z"} ] /// have tried this $scope.$apply; $scope.updateOptions = function() { /// and this $scope.$apply; // but this returns no value until i first click the radio button (someVar) $scope.selectedInput = $scope.someArr.id; // this works - and {{selectedInput is populated}} $scope.selectedInput = $('.some-inputs:checked').val(); } }) 中的包中获取该参数并将其存储在一个字段中。然后在onCreate(...)中检查字段的值并隐藏/显示UI元素。