2014-04-05 2 views
0

버튼 클릭시 기존 xml 레이아웃에 요소를 동적으로 추가하려고합니다. 사용자가 버튼을 클릭 한 횟수에 따라 많은 항목이 기존 XML에 추가되어야합니다. 나는 레이아웃 inflater를 사용하는 것이 좋은 기술이라고 생각하지만, 그것을 할 수는 없다. 어떤 도움이라도 대단히 감사하겠습니다.버튼 클릭시 xml에 동적 요소 추가 android

감사합니다. 여기 내 코드입니다 :

main.xml에 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/main_layout_id"> 
</LinearLayout> 

layout_item.xml :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/layout_item_id"> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 
</LinearLayout> 

자바 파일 :

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final LinearLayout mainLayout = (LinearLayout)findViewById(R.id.main_layout_id); 

    View view = getLayoutInflater().inflate(R.layout.layout_item, mainLayout,false); 

    mainLayout.addView(view); 

    Button b=(Button) findViewById(R.id.button1); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Context c=getApplicationContext(); 
      TextView tvv=new TextView(c); 
      tvv.setText("textview"); 
      mainLayout.addView(tvv); 
     } 
    }); 
} 
+0

당신은 오류를 지정하거나 로그 캣에서 스택 트레이스를 게시해야합니다. 앱이 다운되고 앱에 대해 언급하지 않았습니다. – Raghunandan

+0

죄송합니다. 오류는 응용 프로그램이 실행되고 단추가있는보기가 표시된다는 것입니다. 그러나 버튼을 클릭하면 아무 반응이 없습니다. – userstack

답변

1

버튼 layout_item.xml에 속한다.

그래서이

Button b=(Button) findViewById(R.id.button1); 

으로

Button b=(Button) view.findViewById(R.id.button1); 

당신은 활동 상황을 사용해야 변경

Context c=ActivityName.this; 

예 :

public class MainActivity extends Activity { 
    Fragment fr; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final LinearLayout mainLayout = (LinearLayout)findViewById(R.id.main_layout_id); 

     View view = getLayoutInflater().inflate(R.layout.layout_item, mainLayout,false); 

     mainLayout.addView(view); 
     final LinearLayout ll = (LinearLayout)view.findViewById(R.id.ll); 
     Button b=(Button) view.findViewById(R.id.button1); 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Context c=MainActivity.this; 
       TextView tvv=new TextView(c); 
       tvv.setText("textview"); 
       ll.addView(tvv); 
      } 
     }); 
    } 
} 

layout_item.xml :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout_item_id" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

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

</LinearLayout> 

스냅

enter image description here

+0

Raghunandan에게 감사드립니다. 그러나 단추를 클릭하면 아무 일도 발생하지 않습니다. 텍스트보기가 추가되지 않습니다. 이전과 같은 출력이었습니다. 이 문제를 해결하는 방법을 알려주시겠습니까? – userstack

+0

@userstack 먼저 doe snot work – Raghunandan

+0

을 수정했다고 말한대로 변경해야합니다. 그 후 결과는 버튼이 클릭되었을 때 아무 일도 일어나지 않는다는 것입니다. – userstack

관련 문제