-2

У меня есть LinearLayout, в котором я добавляю представление динамически. Мне нужно изменить фон каждого вида, когда я нажимаю на него.Изменить фон просмотра внутри LinearLayout

Я пытаюсь сделать это в моем коде:

public class UserDetailActivity extends Activity implements View.OnTouchListener { 
... 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.l_user_detail); 

    Intent intent = getIntent(); 
    User user = (User) intent.getSerializableExtra("class"); 

    userWillGo = (LinearLayout) findViewById(R.id.linerLayout_userDetail_willGoTO); 

    for (int i = 0; i < user.getUserWillGo().size(); i++) { 
    View myView = (View)LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_event_list, userWillGo, false); 
       myView.setLayoutParams(new LinearLayout.LayoutParams(
         LinearLayout.LayoutParams.FILL_PARENT, 
         LinearLayout.LayoutParams.FILL_PARENT)); 
       ... 
       myView.setOnTouchListener(mOnTouchListener()); 
       userWillGo.addView(myView); 
      } 

} 

private View.OnTouchListener mOnTouchListener() { 
     return new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        v.setBackgroundResource(R.color.textBlue); 
       } 
       if (event.getAction() == MotionEvent.ACTION_UP) { 
        v.setBackgroundResource(R.drawable.bg_item); 
       } 
       return true; 
      } 
     }; 
} 

Что я получаю в результате этого кода:

enter image description here

Что мне нужно получить:

enter image description here

+0

Что о Выбираете с помощью селектора состояний? – Zielony

+0

Вы говорите о .xml? – Val

+1

Нет. Если вы знаете, как установить фон для ваших видов, вы можете просто заменить этот фон на рисование с помощью селектора состояний. Вы можете сделать это с помощью кода или xml, в зависимости от того, r является более удобным. См.: Http://www.vogella.com/articles/AndroidDrawables/article.html#drawables_state – Zielony

ответ

3

Во-первых, я предложил бы вам ve компонент View View, а не добавление компоновки в цикле.

В виде списка вы можете создать селектор элемента, но в любом случае в текущем сценарии вы можете иметь натяжную возможность селектор * selector_bg.xml * на макете MyView в . Вы можете также использовать андроида: state_focused = "верно | ложь», как описано в вашем сценарии:

<?xml version="1.0" encoding="utf-8"?> 
     <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
      <item android:state_pressed="true" android:drawable="@drawable/hover_bg" /> <!-- pressed --> 
      <item android:drawable="@drawable/normal" /> <!-- default --> 
     </selector> 

myView.setBackgroundResource (R.drawable.selector_bg)

Detailed Reference for the above click here

+0

Это работает, но только если я использую этот LinearLayout как элемент в ListView, но не работаю в моей ситуации. t знать почему. – Val

+0

@ p.Valery Он должен работать в текущем сценарии также может быть из-за других объектов фокуса-соболя на представлении, но все же я предлагаю лучший способ List View. Потому что он перерабатывает представления и не имеет проблем с памятью, так что сделать оптимизированное приложение –

+0

Мне нужен список без прокрутки, я не могу сделать это с помощью справки по списку. – Val

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