2012-09-25 14 views
10

リニアレイアウトに子ビューを追加しています。子ビュー自体にはRelativelayoutのテキストビューとイメージビューがあります。 ボタンをクリックすると、子ビューがLinearLayoutに動的に追加されます。今私は、この写真に示すように子ビューを追加することができます。 http://dl.dropbox.com/u/50249620/SC20120926-031356.png 私がしなければならないことは、適切なアクションを表示するためにどの子ビューがクリックされたかを一意に識別することです。 私のコードでは、子ビューを追加しています。クリックされた子ビューのIDを動的にLinearLayoutに追加する方法は?

addButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 


       customView1 = inflater.inflate(R.layout.people, null); 

       peopleName = (TextView) customView1.findViewById(R.id.peopleName); 

       peopleName.setText(autoComplete.getText()); 
       customView1.setId(peopleInvitedRelativeLayout.getChildCount() + 1); 

       params4 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

       customView1.setLayoutParams(params4); 
       peopleInvitedRelativeLayout.addView(customView1, params4);    

      } 
     }); 

ご意見やご感想をお寄せください。ありがとう。ビューを作成するときに

+0

のためのクラス変数を作成しますか? http://stackoverflow.com/questions/7807058/get-child-view-in-a-relativelayout – flashsnake

+0

'view.getId()'? – kcoppock

+0

親LinearLayoutの子ビューのインデックスを知っていても、そのIDを取得できますが、ユーザがクリックした子のインデックスを取得できません。 – hshed

答えて

13

あなたがいずれかを受け入れます

view.getTag() 

setTag(Object o)とタグを見つけるonClickListener以降で

view.setTag(Object o); 

、単純に次の操作を行って、任意のビューにカスタムタグを追加することができますオブジェクトの種類は文字列、intまたはカスタムクラスになります

EDIT

addButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 


      customView1 = inflater.inflate(R.layout.people, null); 

      peopleName = (TextView) customView1.findViewById(R.id.peopleName); 

      peopleName.setText(autoComplete.getText()); 
      customView1.setId(peopleInvitedRelativeLayout.getChildCount() + 1); 

      params4 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

      customView1.setLayoutParams(params4); 
      peopleInvitedRelativeLayout.addView(customView1, params4); 

      //add a tag to a view and add a clicklistener to the view 
      customView1.setTag(someTag); 
      customView1.setOnClickListener(myClickListner); 



     } 
    }); 

clicklistener - それはどのようにこのリンクについて

OnClickListener myClickListener = new onClickListener(){ 
    @Override 
    public void onClick(View v) { 

     if(v.getTag() == someTag){ 
      //do stuff 
     }else if(v.getTag() == otherTag){ 
      //do something else 
     } 
    } 
+0

私はcustomview1.setonclicklistener .....を使用すると、customview1これはbutton.setonclicklistenerで膨らんでいるため、nullです。そのため、どの子ビューがクリックされたのかを特定することができません。 – hshed

+0

次に、onClickListenerをaddButton onClickListenerのcustomView1に追加します。詳細については私の答えを編集します。 – triggs

+0

ご協力いただきありがとうございます。それは働いているようだ。私はOnLongClickListenerを使用しました。私は項目を長くクリックするとコンテキストメニューを表示する必要があります。コンテキストメニュー項目の1つは、クリックした項目を削除する必要がありますが、これは自分のコードでは機能しません。最初の項目を削除する必要があると仮定します。public boolean onContextItemSelected(MenuItem item){ if(item.getTitle()== "Action 1"){ peopleInvitedRelativeLayout.removeViewAt(0); } else {return false;} trueを返します。 }ここで、アクション1はコンテキストメニュー項目です。 removeViewは機能しません。 – hshed

関連する問題