2013-03-27 51 views
0

Im绝望。我试图在Fragment类中添加一个onClickListener。 这个想法是,我有一个ViewPager与图像。我想要的只是点击图像本身,并显示吐司消息。我知道你不能注册一个OnClickListenerViewPager本身,所以我试图在Fragment类处理ImageView添加。 现在会发生什么是,该onClick方法的工作,如果我点击图像之一,它会显示一条消息,但它一直显示我用默认的交换机情况。我只是为了我的生活而不知道为什么......! :( 下面的代码也许你可以看到一个解决方案ViewPager和片段onClickListener不能正常工作

感谢

MainActivity:?

package com.example.viewpagerexample; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends FragmentActivity{ 

private static final int NUM_PAGES = 5; 

private MyAdapter mAdapter; 
private ViewPager mPager; 

private Button leftBTN; 
private Button rightBTN; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mAdapter = new MyAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 


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

     @Override 
     public void onClick(View v) { 
      mPager.setCurrentItem(mPager.getCurrentItem()-1, true); 
     } 
    }); 

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

     @Override 
     public void onClick(View v) { 
      mPager.setCurrentItem(mPager.getCurrentItem()+1, true); 
     } 
    }); 
} 

public static class MyAdapter extends FragmentPagerAdapter { 

    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public int getCount() { 
     return NUM_PAGES; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     ImageFragment myFragment = new ImageFragment(); 
     Bundle data = new Bundle(); 
     data.putInt("current_page", position); 
     myFragment.setArguments(data); 
     return myFragment; 
    } 
} 
} 

这里是片段类的OnClickListener实现:

package com.example.viewpagerexample; 

import com.example.viewpagerexample.R; 

import android.annotation.SuppressLint; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.webkit.WebView.FindListener; 
import android.widget.ImageView; 
import android.widget.Toast; 


public class ImageFragment extends Fragment implements OnClickListener{ 

private int position; 
private ImageView imageView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Bundle data = getArguments(); 
    position = data.getInt("current_page", 0); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.image_details, container, false); 
    imageView = (ImageView) view.findViewById(R.id.imageView1); 
    imageView.setOnClickListener(this); 

    switch (position) { 
    case 0: 
     imageView.setImageResource(R.drawable.splash); 
     return view; 
    case 1: 
     imageView.setImageResource(R.drawable.girrafe); 
     return view; 
    case 2: 
     imageView.setImageResource(R.drawable.lion); 
     return view; 
    case 3: 
     imageView.setImageResource(R.drawable.monkey); 
     return view; 
    case 4: 
     imageView.setImageResource(R.drawable.chicken); 
     return view; 
    default: 
     return null; 
    } 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 
    case R.drawable.splash: 
     Log.d("DEBUG", "image 0 pressed"); 
    Toast.makeText(getActivity(), "Pic 1", Toast.LENGTH_SHORT).show(); 
     return; 
    case R.drawable.girrafe: 
     Log.d("DEBUG", "image 1 pressed"); 
     Toast.makeText(getActivity(), "Pic 2", Toast.LENGTH_SHORT).show(); 
     return; 
    case R.drawable.lion: 
     Log.d("DEBUG", "image 2 pressed"); 
     Toast.makeText(getActivity(), "Pic 3", Toast.LENGTH_SHORT).show(); 
     return; 
    case R.drawable.monkey: 
     Log.d("DEBUG", "image 3 pressed"); 
     Toast.makeText(getActivity(), "Pic 4", Toast.LENGTH_SHORT).show(); 
     return; 
    case R.drawable.chicken: 
     Log.d("DEBUG", "image 4 pressed"); 
     Toast.makeText(getActivity(), "Pic 5", Toast.LENGTH_SHORT).show(); 
     return; 
    default: 
     Log.d("DEBUG", "v.getId(): " + v.getId()); 
     Log.d("DEBUG", "default pressed"); 
     Toast.makeText(getActivity(), "DEFAULT pressed!", Toast.LENGTH_SHORT).show(); 
     return; 
    } 
} 

}

回答

0

我认为在你的onclick我thod,v.getId()(点击视图的ID)总是返回R.id.imageView1,这就是为什么你总是得到onClick的默认开关大小写。

您设置onClickListener您的ImageView,但你忘了改变的ImageView的ID,这样的标识仍然是R.id.imageView1和你的听众无法妥善处理。

尝试编辑您的onCreateView方法的switch语句是这样的:

switch (position) { 
case 0: 
    imageView.setImageResource(R.drawable.splash); 
    imageView.setId(R.drawable.splash); 
    return view; 
case 1: 
    imageView.setImageResource(R.drawable.girrafe); 
    imageView.setId(R.drawable.girrafe); 
    return view; 
case 2: 
    imageView.setImageResource(R.drawable.lion); 
    imageView.setId(R.drawable.lion); 
    return view; 
case 3: 
    imageView.setImageResource(R.drawable.monkey); 
    imageView.setId(R.drawable.monkey); 
    return view; 
case 4: 
    imageView.setImageResource(R.drawable.chicken); 
    imageView.setId(R.drawable.chicken); 
    return view; 
default: 
    return null; 
} 
+1

SWEET!这工作完美!但我怎么知道呢? :) 非常感谢你! 一个小问题,如果我想打一个声音,而不是面包味精的,我应该使用的Soundpool或媒体播放器?它的声音很短。 – 2013-03-27 15:23:05

+0

我ussualy使用媒体播放器播放的声音在我的应用程序,对我来说,似乎更容易使用的MediaPlayer,但我不这么用的Soundpool,也许是最好的办法就是自己检查它经历。 :) – 2013-03-27 15:36:42

+0

同意:) 再次感谢! – 2013-03-27 15:38:14