одно и долгое нажатие не работает после реализации прослушивателя onclick для imageButton в listView на Android - PullRequest
0 голосов
/ 13 марта 2012

У меня есть представление списка на Android с [TextView TextView ImageButton].Я реализую представление списка с помощью ArrayAdapter.Согласно моему требованию мне нужно одно и долгое нажатие события для просмотра списка, так что я использую registerForContextMenu (getListView ()) для длительного нажатия и для одиночного нажатия я использую onListItemClick . это работало нормально. после этого дополнительно мне нужно событие onClick для imageButton при просмотре списка и реализация onclick для imageButton.

Теперь моя проблема заключается в событии одиночного нажатия, и событие продолжительного нажатия не работает после реализации прослушивателя onClick для imageButton в listView. Но прослушиватель ImageButton onClick работает нормально.

я добавляю свойство android: focusable = "false" к imageButton, но это мне не помогает.

Как получить события одиночного и длительного нажатияс onclick слушателем для ImageButton ?.Пожалуйста, помогите мне.

group.xml:

......
<ListView
    android:id="@id/android:list"
    android:focusable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>
.....

group_row.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        ......
        android:focusable="false" />
    <ImageButton
        android:id="@+id/group_row_gadd"
        .....
        android:focusable="false"
        android:background="@drawable/add" />
    <TextView
        android:id="@+id/group_row_grow"
        ....
        android:focusable="false" />
</RelativeLayout>

мой класс адаптера массива:

public class GroupAdapter extends ArrayAdapter<String> implements OnClickListener{
    ....    

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.group_row, parent, false);

        name = (TextView) rowView.findViewById(R.id.group_row_gname);
        number = (TextView) rowView.findViewById(R.id.group_row_grow);
        add = (ImageButton) rowView.findViewById(R.id.group_row_gadd);
        add.setTag(position);
        add.setOnClickListener(this);

        return rowView;
    }

    public void onClick(View v) {
        Log.e("onclick", "onclick");
        Integer position = (Integer) v.getTag();
        switch (v.getId()) {
        case R.id.group_row_gadd:

            break;
        }

    }

}

основной класс:

public class Group extends ListActivity{
    .....   
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);
        setContentView(R.layout.group);
        registerForContextMenu(getListView());
        .....   
    }// OnCreate End

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        .....
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.group_edit_remove, menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        .....
        return false;
    }   

}

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Потому что ImageButton не может получить фокус. Установите OnItemClickListener на ListView, элемент ListView будет его первым приоритетом, чтобы получить фокус. Так что, когда вы нажимаете кнопку ImageButton, он не будет работать. Вы можете изменить свой GroupAdapter.

0 голосов
/ 13 марта 2012

Полагаю, вам также нужно установить android:focusableInTouchMode="false" для элементов вашего просмотра в group_row.xml

...