我想问一下我的逻辑是否可以接受?我想通过操作栏按钮的触发器添加视图(LinearLayouts),调用tab2.refresh()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_edit_profile:
Toast.makeText(getActivity(), "Edit", Toast.LENGTH_SHORT).show();
// Intent intent = new Intent(getActivity(),EditProfileActivity.class);
// startActivity(intent);
break;
case R.id.action_refresh:
// Intent intent = new Intent(getActivity(),EditProfileActivity.class);
// startActivity(intent);
tab2.refresh();
break;
}
return super.onOptionsItemSelected(item);
}
这是方法
public class Tab2 extends Fragment {
static LinearLayout LL;
static LinearLayout parent_linear;
Context context;
View v;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
v = inflater.inflate(R.layout.tab2, container, false);
context = getActivity();
parent_linear = (LinearLayout) v.findViewById(R.id.parent_linear);
LL = new LinearLayout(context);
return v;
}
private static void create_layout() {
LL.setBackgroundResource(R.drawable.navbtns);
LL.setClickable(true);
LL.setPadding(25, 25, 25, 25);
LayoutParams LLParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
LLParams.setMargins(0, 15, 0, 0);
LL.setOrientation(LinearLayout.HORIZONTAL);
LL.setLayoutParams(LLParams);
}
public static void refresh() {
create_layout();
parent_linear.addView(LL);
}}
请帮助日志猫这样说,但我想我不能做它说的,因为我想添加多个相同的视图,但它要我删除它-_-
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
答案 0 :(得分:0)
首先,我不太清楚你到底想要做什么,但据我所知,你正在创建某种项目列表,从空列表开始,每次用户按下刷新按钮时添加一个。 至少基于名称,这没有多大意义,因为你对刷新按钮的期望是刷新内容,而不是添加更多,但让我们假设这只是一个命名问题,你的按钮必须添加还有一件事。
如果这是你想要的,听起来很像你应该使用ListView或RecyclerView,而不是每次都手动添加新的布局。您应该将此布局定义为RecyclerView的项目,然后将一个项目添加到列表中并刷新recyclerview以反映内容的更改。
最后但并非最不重要的一点是,如果您仍然希望按照任何原因按自己的方式进行操作,那么您确切的问题是,子视图不能有多个父级,因为日志正好说明了。解决方法是每次调用refresh()方法时实际创建一个新的LinearLayout,因为当前你多次引用同一个对象并在onCreateView方法上创建它,只需调用一次。
但是再次尝试使用像这个例子中的RecyclerView,似乎是以正确的方式来解决你的问题: http://javatechig.com/android/android-recyclerview-example