我正在开发一个库,它将为片段提供一些输入字段。这些输入字段将包含用户的私人信息,使用我的库的应用程序无权访问。因此,edittexts或我们可以说片段的布局无法从附加此片段的活动(findViewById,getChildAt ..)访问。
不接受使用对话框或其他活动,此片段应直接包含在活动的布局中。
这在Android中甚至可能吗?
我正在考虑动态创建视图,并覆盖getChildAt等方法以防止访问子视图,但在我开始之前#34;播放"有了这个问题,我宁愿在这里问一些意见。
答案 0 :(得分:3)
Android不提供此类用法的模型。 重写方法肯定会使访问这些视图变得更加困难,但并非不可能。您的自定义视图类必须将其子项存储在某个位置。即使这是私有字段,反射也可以访问它。
活动可以完全控制他的内容,我认为你不能阻止它。
答案 1 :(得分:2)
首先,你想要的不是一个好的方法,我建议的只是一个想法,它没有经过测试和推荐,但可以做你的工作
创建类 BaseFragment 并使用Base Fragment扩展每个类
必须覆盖其getView()
在这些方法中,您必须删除根视图作为类成员getView返回相同的
public class BaseFragment extends Fragment {
@Nullable
@Override
public View getView() {
super.getView();
}
}
现在你可以用两种方式做到这一点
使用私人访问权限 boolean
在BaseFragment
中创建boolean canAccess = true;
,不使用getter和setter,并将getView()
的定义更改为
public BaseFragment() {
canAccess = false;
}
@Nullable
@Override
public View getView() {
if(canAccess)
return super.getView();
return
null;
}
您必须为每个子构造函数调用super()
,现在如果您在类getView
中访问canAccess
为真,那么您将获得实际视图,否则您将获得null。
根据文件
获取片段布局的根视图({@link #onCreateView}返回的那个),
如果提供@return片段的根视图,如果没有布局则为null。
第二个选项最简单
@Nullable
@Override
public View getView() {
try {
throw new Exception("Who called me?");
} catch (Exception e) {
String className = e.getStackTrace()[1].getClass().getCanonicalName();
if (className.equals(YourParentActivity.class.getCanonicalName()))
return null;
else
return super.getView();
}
}
答案 2 :(得分:1)
您可以使用以下方法禁用片段内的内容:
public void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
int childCount = viewGroup.getChildCount();
for(int i = 0; i < childCount; i++) {
View view = viewGroup.getChildAt(i);
view.setEnabled(enabled);
if (view instanceof ViewGroup) {
enableDisableViewGroup((ViewGroup) view, enabled);
}
}
}
您只需按以下方式调用上述方法:
enableDisableViewGroup((ViewGroup) rootView, true); // disable
enableDisableViewGroup((ViewGroup) rootView, false); // enable
此方法适用于片段和适配器以禁用/启用其内容。
答案 3 :(得分:0)
我猜我没理解,但我认为无法从外部访问由私有访问模式创建的任何内容。
答案 4 :(得分:0)
你有没有考虑过使用webview来解决你的特定问题!!!
创建一个片段,然后在其中显示您想要的webview,并让用户输入他喜欢的任何内容。
这样,OTHER APP将无法访问EditTexts。
答案 5 :(得分:0)
您可以覆盖TextView的getText()并为私有视图返回null。如果有人会得到这个文本视图 - 他将无法获得它的内容。