2014-05-09 189 views
0

我無法讓我的setOnClickListener按鈕功能正常工作。Android按鈕OnClickListener不工作

我使用viewPager。按鈕在一個片段內。當我點擊它時,viewPager和Button都無法獲得焦點。

下面是相關的代碼:

MainActivity:

package com.paradroid.paradroidalarm; 

import android.os.Bundle; 
import android.support.v4.view.ViewPager; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.paradroid.adapter.TabsAdapter; 

public class MainActivity extends SherlockFragmentActivity { 



    private ViewPager mViewPager; 
    private TabsAdapter mTabsAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mViewPager = new ViewPager(this); 
    mViewPager.setId(R.id.pager); 
    setContentView(mViewPager); 

    Fragment_1.ma = this; 

    ActionBar bar = getSupportActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    mTabsAdapter = new TabsAdapter(this, mViewPager); 
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 1"), Fragment_1.class, null); 
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 2"), Fragment_2.class, null); 
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 3"), Fragment_3.class, null); 
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 4"), Fragment_4.class, null); 


    } 

} 

Fragment_1:

add_alarm = (Button)v.findViewById(R.id.add_alarm); 
    add_alarm.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      Fragment_1.loadTimer(); 

     } 

    }); 

activity_main.xml中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFF" 
    tools:context=".MainActivity" > 

    <android.support.v4.view.ViewPager 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/pager" /> 



</RelativeLayout> 

fragment_1.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/alarm_face" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:src="@drawable/final_icon_smile" /> 

    <Button 
     android:id="@+id/add_alarm" 
     android:layout_width="60dp" 
     android:layout_height="40dp" 
     android:layout_margin="5dp" 
     android:background="#F0F0F0" 
     android:text="caca" 
     android:textColor="#000000" 
     android:textSize="13sp" /> 

    <TextView 
     android:id="@+id/instructions_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:background="@drawable/rounded_edges_in" 
     android:gravity="center" 
     android:padding="5dp" 
     android:text="@string/instructions1" 
     android:textColor="#FFFFFF" 
     android:textSize="15sp" 
     android:textStyle="bold" 
     android:typeface="serif" > 
    </TextView> 

    <ListView 
     android:id="@+id/listAlarm" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_margin="4dp" 
     android:background="@drawable/rounded_edges_lv" 
     android:cacheColorHint="@android:color/transparent" 
     android:divider="#808080" 
     android:dividerHeight="1px" > 
    </ListView> 

</LinearLayout> 

正如我所說,我第一次懷疑viewPager截取所有的水龍頭之前,它下降到後代的觀點,但事實證明,它不是。我無法檢測到任何水龍頭。

編輯: TabsAdapter:

package com.paradroid.adapter; 

import java.util.ArrayList; 

import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.util.Log; 
import android.widget.Toast; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 

public class TabsAdapter extends FragmentPagerAdapter implements ActionBar.TabListener , ViewPager.OnPageChangeListener{ 
    private final Context mContext; 
    private final ActionBar mActionBar; 
    private final ViewPager mViewPager; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 
    private final String TAG = "21st Polling:"; 

    static final class TabInfo{ 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(Class<?> _class, Bundle _args){ 
      clss = _class; 
      args = _args; 
     } 
    } 

    public TabsAdapter(SherlockFragmentActivity fa, ViewPager pager) { 
     super(fa.getSupportFragmentManager()); 
     mContext = fa; 
     mActionBar = fa.getSupportActionBar(); 
     mViewPager = pager; 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 
    } 

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args){ 
     TabInfo info = new TabInfo(clss, args); 
     tab.setTag(info); 
     tab.setTabListener(this); 
     mTabs.add(info); 
     mActionBar.addTab(tab); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 


    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 


    } 

    @Override 
    public void onPageSelected(int position) { 
     mActionBar.setSelectedNavigationItem(position); 

    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     mViewPager.setCurrentItem(tab.getPosition()); 
     Log.v(TAG, "clicked"); 
     Object tag = tab.getTag(); 
     for (int i = 0; i<mTabs.size(); i++){ 
      if (mTabs.get(i) == tag){ 
       mViewPager.setCurrentItem(i); 
      } 
     } 

    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     Toast.makeText(mContext, "You've deselected a tab", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 

    } 

    @Override 
    public Fragment getItem(int position) { 
     TabInfo info = mTabs.get(position); 
     return Fragment.instantiate(mContext, info.clss.getName(), info.args); 
    } 

    @Override 
    public int getCount() { 
     return mTabs.size(); 
    } 

} 
+0

但是你必須在''ViewPager'中設置'adapter'? –

+0

使用適配器編輯。 –

回答

0

正是看到你的XML onClick容易得多:android:onClick="onClickName"
而在你的MainActivity,地點:

public void onClickName (View v) { 
    // Do your stuff 
} 

我不明白什麼不過,你的意思是'既不viewPager也不Button'。