无法将多个相同的子视图添加到父视图

时间:2015-09-16 15:42:27

标签: java android android-layout android-fragments

我想问一下我的逻辑是否可以接受?我想通过操作栏按钮的触发器添加视图(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.

1 个答案:

答案 0 :(得分:0)

首先,我不太清楚你到底想要做什么,但据我所知,你正在创建某种项目列表,从空列表开始,每次用户按下刷新按钮时添加一个。 至少基于名称,这没有多大意义,因为你对刷新按钮的期望是刷新内容,而不是添加更多,但让我们假设这只是一个命名问题,你的按钮必须添加还有一件事。

如果这是你想要的,听起来很像你应该使用ListView或RecyclerView,而不是每次都手动添加新的布局。您应该将此布局定义为RecyclerView的项目,然后将一个项目添加到列表中并刷新recyclerview以反映内容的更改。

最后但并非最不重要的一点是,如果您仍然希望按照任何原因按自己的方式进行操作,那么您确切的问题是,子视图不能有多个父级,因为日志正好说明了。解决方法是每次调用refresh()方法时实际创建一个新的LinearLayout,因为当前你多次引用同一个对象并在onCreateView方法上创建它,只需调用一次。

但是再次尝试使用像这个例子中的RecyclerView,似乎是以正确的方式来解决你的问题: http://javatechig.com/android/android-recyclerview-example