2013-03-14 2 views
1

В моем приложении у меня есть три вкладки. На каждой вкладке у меня есть несколько элементов управления. Когда я попытался реализовать метод onClick для своих кнопок, я обнаружил, что кнопки не реагируют на жесты рук, а точнее - на клики.Кнопка не отвечает на фрагмент вкладки

Вот класс для закладки:

package com.telkitty.myPetProject 

import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.provider.Contacts; 
import android.provider.ContactsContract; 

public class ContactPage extends Fragment { 

    private static final int CONTACT_PICKER_RESULT = 1001; 

    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Activity activity = getActivity(); 

     if (activity != null) 
     {  
      addListenerOnButton();  
     } 
    } 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.inflate(R.layout.contact_page, container, false);  
     return view; 
    } 


    public void onListItemClick(ListView l, View v, int position, long id) { 
     Activity activity = getActivity(); 


    } 


    public void addListenerOnButton() 
    { 
     Button add = (Button) getView().findViewById(R.id.add_button); 
     add.setOnClickListener(new View.OnClickListener() 
     { 
     public void onClick(View v) 
     { 
      Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
        Contacts.CONTENT_URI); 
      startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); 
     }}); 
    } 

} 

Вот XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 


    <Button 
     android:id="@+id/edit_button" 
     android:layout_width="80dp" 
     android:layout_height="50dp" 
     android:layout_alignParentLeft="true" 
     android:layout_marginRight="10dp" 
     android:text="@string/edit_contact"/> 

    <Button 
     android:id="@+id/add_button" 
     android:layout_width="150dp" 
     android:layout_height="50dp" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="10dp" 
     android:text="@string/add_contact"/> 



    <ListView 
     android:id="@+id/contact_list" 
     android:layout_width="320dp" 
     android:layout_height="380dp" 
     android:paddingTop="50dp" > 

    </ListView>  

</RelativeLayout> 

Что я сделал не так?

+0

есть ошибки? –

+0

Ошибка, она работает, только код внутри onClick никогда не вызывается. – 2013-03-14 14:07:54

+0

Кажется, кнопки не отвечают на клики - кнопка не перехватывает действия кликов. – 2013-03-15 12:42:50

ответ

0

Хорошо, просто мои кнопки были на самом деле ниже ListView, поэтому, хотя они выглядели так, как будто они были там, каждый раз, когда я нажимал на них, ListView фактически был выбран.

Я добавил выделенную строку, теперь кнопка работает так, как должна.

public void addListenerOnButton() 
    { 
     Button add = (Button) getView().findViewById(R.id.add_button); 
     add.bringToFront(); // <--- this line 
     add.setOnClickListener(new View.OnClickListener() 
     { 
     public void onClick(View v) 
     { 
      Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
        Contacts.CONTENT_URI); 
      startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); 
     }}); 
    } 
0

Определите свои взгляды в onCreateView(..) вашего Fragment и зарегистрировать слушателей, как следует:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.inflate(R.layout.contact_page, container, false); 
     Button lEditButton = (Button) view.findViewById(R.id.edit_button); 
     Button lAddButton = (Button) view.findViewById(R.id.add_button); 
     ListView lContactList = (ListView) view.findViewById(R.id.contact_list); 

     lEditButton.setOnClickListener(this); 
     lAddButton.setOnClickListener(this); 
     lContactList.setOnItemClickListener(this); 

     return view; 
    } 

Реализовать onClickListener и onItemClickListener интерфейс на:

public class ContactPage extends Fragment implements onClickListener, onItemClickListener { 

Используя эти интерфейсы, вы будете вынуждены переопределите onClick(View v) и onItemClick(..), где вы можете обрабатывать свои действия для кнопок и списка.

+0

Спасибо за ответ. Я пробовал ваш код, но кнопка все еще не отвечает на клик. – 2013-03-15 12:31:12

+0

Элементы управления в фрагменте вкладки действуют по-разному? – 2013-03-15 12:32:35

+0

Нет, он работает одинаково. – DroidBender

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