2015-04-05 1 views
0

Как получить идентификатор динамически созданного View в android? На самом деле у меня много просмотров в моем макете, и я хочу, чтобы идентификатор этого вида был затронут пользователем. Это возможно? если да, то как это сделать?Как получить ViewId динамически в android

В следующем коде создана новая структура кадра, у меня есть generateViewId для этого макета и сохраните этот идентификатор в качестве ключа к HashMap (logoResizingRecordList).

FrameLayout fm=new FrameLayout(getApplication()); 
FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(400,300); 
        fm.addView(img_pinch,params); 

int FrameLayoutID=fm.generateViewId(); 

logoResizingRecordList.put(FrameLayoutID,logoObj); 
fm.setOnTouchListener(logoTouchListner); 

Здесь OnTouch Я назначил экземпляр FrameLayout для temp_img_logo.

public boolean onTouch(final View p_v, MotionEvent p_event) 
    {    
     if(p_v instanceof FrameLayout) {   
      temp_img_logo=(FrameLayout)p_v; 
     } 

здесь я хочу, чтобы получить идентификатор выше FrameLayout (фм) Но вернуться по умолчанию Id любого View, т.е. -1

logoResizingRecordList.get(temp_img_logo.getId()) 

Теперь мой вопрос заключается в том, что это возможно, чтобы получить id fm (FrameLayout), который я создал динамически? Если да, то, пожалуйста, помогите мне найти его.

+1

Что вы имеете в виду под «динамически создается»? Вы имеете в виду, что вы используете конструктор в подклассах 'View' (например,' new Button (...) ')? Вы имеете в виду, что используете «LayoutInflater»? Вы имеете в виду что-то еще? – CommonsWare

+0

@CommosWare динамически означает, что TextView создаются программно, а затем добавляются в макет. теперь я хочу получить идентификатор этого текста в событии OnTouch. – NighterZ

+0

Что вы подразумеваете под «создаются программно»? Вы имеете в виду, что вы используете конструктор в подклассах 'View' (например,' new Button (...) ')? Вы имеете в виду, что используете «LayoutInflater»? Вы имеете в виду что-то еще? – CommonsWare

ответ

0

Android не генерирует ID динамически. Вы должны сделать это сами.

Простой пример, который поможет вам:

public static final int TEXT_VIEW1_ID = 1001; 

TextView textView1 = new TextView(Context); 
textView1.setId(TEXT_VIEW1_ID); 

relativeLayout.addView(textView1); 
relativeLayout.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     if(view.getId() == TEXT_VIEW1_ID){ 
      Toast.makeText(context, "TextView1 was touched.", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     return false; 
    } 
}); 
0

установить OnClick слушателя для всех это одного слушателя и сделать выключатель arg1.getId() метода OnClick

0

Да, вы можете,

Во-первых, для того, чтобы получить id, вы должны установить идентификатор,

TextView txt = new TextView(context); 
txt.setId(some integer); 

Затем вам необходимо сохранить динамические представления в каком-либо виде, например в массиве или списке. Тогда Вы можете получить позицию, которая была затронута и получить соответствующий вид идентификатор следующим образом,

int id = textViewList.get(position).getId(); 
+0

Я отправил свой код, пожалуйста, проверьте его. – NighterZ

+0

если у меня есть textView, и я установил на него прослушиватель OnTouch, тогда идентификатор параметра View для параметра OnTouch Listener и идентификатор TextView оба такие же или нет? Я получаю разные идентификаторы, пожалуйста, помогите мне. – NighterZ

 Смежные вопросы

  • Нет связанных вопросов^_^