1

私のアプリには、3つのタブがあります。各タブには、いくつかのコントロールがあります。ボタンに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>

私は何を間違えましたか?

4

2 に答える 2

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(..)

于 2013-03-14T14:36:18.943 に答える
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);  
        }});
    }
于 2013-03-15T12:52:43.443 に答える