2015-05-03 3 views
-1

В веб-разработке у нас есть что-то, называемое event delegation - когда родительский элемент DOM получает все события своих дочерних элементов. В основном это делается по соображениям производительности. У Android есть что-то подобное? Например, у меня есть LinearLayout и 100 детей TextView s. Я не хочу добавлять 100 слушателей событий к каждому TextView, но добавить только один из LinearLayout и поймать в нем события?Можно ли уловить дочерние события на родительских представлениях в android

Например, вместо этого:

for (int i = 0; i < length; i++) { 
    TextView tv = new TextView(getApplicationContext()); 

    tv.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) {} 
    }); 

    layout.addView(tv); 
} 

сделать это:

for (int i = 0; i < length; i++) { 
    TextView tv = new TextView(getApplicationContext()); 
    layout.addView(tv); 
} 

layout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // how to know here whether `v` is an instance of TextView or LinearLayout? 
    } 
}); 
+0

Вы хотите захватить события касания дочерних событий и передать их родительскому виду? –

+0

Это часть задачи, которую я пытаюсь выполнить, и она описана в моем [этом вопросе] (http://stackoverflow.com/questions/30011839/multiple-text-views-or-one-text-view-with -clickable-spans) –

+0

уже существует метод v instanceOf TextView, который вернет true или false. –

ответ

0

можно реализовать onClickListener на активность

public class MyActivity extends Activity implements View.OnClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // your oncreate 
    } 

    @Override 
    public void onClick(View v) { 
     // v is clicked textview 
    } 
} 

убедитесь, что ваши TextViews кликабельны textView.setClickable(true);

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