2016-11-16 60 views
-2

我有麻烦调用布局编程,我尝试在XML中使用包括其工作如何在android中以编程方式包含相同的布局两次?

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!" 
    android:id="@+id/btnTes"/> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/LL1" 
    android:orientation="vertical"> 

    <include layout="@layout/extend"> 
    </include> 

    <include layout="@layout/extend"> 

    </include> 

</LinearLayout> 

,但我想以编程方式创建它 这是我的扩展XML:

<TextView 
    android:text="TextView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView" /> 

<TextView 
    android:text="TextView2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView2" /> 

这是我的java:

public class MainActivity extends AppCompatActivity { 
Button btnTes; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final ViewGroup tes = (ViewGroup) findViewById(R.id.LL1); 
    btnTes = (Button) findViewById(R.id.btnTes); 
    final View extend = LayoutInflater.from(this).inflate(R.layout.extend,null); 

    btnTes.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(MainActivity.this, "KLIk", Toast.LENGTH_SHORT).show(); 
      tes.addView(extend); 

     } 
    }); 

} 

}

当我点击btnTes 第一个点击其确定,但是当我再次单击我的计划只是强制关闭。这是我的错误

FATAL EXCEPTION: main 
       Process: com.example.siwonhansamu.test, PID: 3796 
       java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

感谢

+0

您不能在布局中多次添加相同的视图。考虑使用“RecyclerView”来代替。 – PsyGik

回答

0

不能同一视图中添加多个家长。

如果您需要多次,您必须复制该视图。你可以这样做:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final ViewGroup tes = (ViewGroup) findViewById(R.id.LL1); 
    btnTes = (Button) findViewById(R.id.btnTes); 

    btnTes.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(MainActivity.this, "KLIk", Toast.LENGTH_SHORT).show(); 
      final View extend = LayoutInflater.from(view.getContext()).inflate(R.layout.extend, tes, false); 
      tes.addView(extend); 

     } 
    }); 
} 
+0

感谢它的工作:) –

0

当我点击btnTes第一个点击其确定,但是当我再次点击 我的计划只是强制关闭。

这就是预期的行为。视图的实例只能有一个父对象。当您第二次按下按钮时extend已经有父母(tes),并且您不能再次在该实例上拨打addView。快速解决方法是把

final View extend = LayoutInflater.from(this).inflate(R.layout.extend,null);

onClick。这样,每次按下按钮时,都会创建一个新实例。

相关问题