我如何开发一个他内容动态的片段?
例如。片段的默认内容为三<Button>
,具体取决于片段的活动,片段只能有两个<button>
或只有一个<button>
可见。
如何控制内容的“条件可见性”?
此外,还有一种方法可以根据活动状态控制按钮的“条件可见性”吗?
制作它的最佳方法是什么?我可以使用所有按钮创建片段xml并控制它们在活动中的可见性吗?或者我通过活动或片段本身插入并删除按钮?
对不起我的英语,我是巴西用户。
答案 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元素。