2017-02-14 46 views
0

我想從我的適配器類調用一個方法..但我得到這個錯誤:ClassCastException異常:主(MainActivity)不能轉換爲PlayPauseClick(接口)

ClassCastException異常:主要(MainActivity )不能被轉換爲PlayPauseClick(接口)

這是我在我的片段(UpdatesFragment法):

 void imageButtonOnClick(View v, int position){ 
    playPause=(ImageView)v.findViewById(R.id.playPause); 
    Product m = productList.get(position); 
    playPause.setImageResource(m.getPlayPauseId()); 
    playPause.setTag(position); 
    playPause.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       int pos = (Integer) v.getTag(); 
       Product m =(Product) productList.get(pos); 
       if (paused) { 
       m.setPlayPauseId(R.drawable.ic_pause); 
       paused=false; 
       }else { 
       m.setPlayPauseId(R.drawable.ic_play); 
       paused = true; 
       } 
       adapter.notifyDataSetChanged();  
      } 

     }); 
    } 

這是我接口(PlayPauseClick):

public interface PlayPauseClick{ 
void imageButtonOnClick(View v, int position); 
} 

這是我適配器

public class FunDapter<T> extends BaseAdapter implements Filterable { 



protected List<T> mDataItems; 
protected List<T> mOrigDataItems; 
protected LongExtractor<T> idExtractor; 
protected final Context mContext; 
private final int mLayoutResource; 
private final BindDictionary<T> mBindDictionary; 
private int oddColorRes; 
private int evenColorRes; 
private FunDapterFilter<T> funDapterFilter; 
private Filter mFilter; 



public FunDapter(Context context, List<T> dataItems, int layoutResource, 
       BindDictionary<T> dictionary) { 
    this(context, dataItems, layoutResource, null, dictionary); 
} 


public FunDapter(Context context, List<T> dataItems, int layoutResource, 
       LongExtractor<T> idExtractor, BindDictionary<T> dictionary) { 
    this.mContext = context; 
    this.mDataItems = dataItems; 
    this.mOrigDataItems = dataItems; 
    this.mLayoutResource = layoutResource; 
    this.idExtractor = idExtractor; 
    this.mBindDictionary = dictionary; 

} 


public void updateData(List<T> dataItems) { 
    this.mDataItems = dataItems; 
    this.mOrigDataItems = dataItems; 
    notifyDataSetChanged(); 
} 

@Override 
public int getCount() { 
    if (mDataItems == null || mBindDictionary == null) return 0; 

    return mDataItems.size(); 
} 

@Override 
public T getItem(int position) { 
    return mDataItems.get(position); 
} 

@Override 
public boolean hasStableIds() { 
    if(idExtractor == null) return super.hasStableIds(); 
    else return true; 
} 

@Override 
public long getItemId(int position) { 
    if(idExtractor == null) return position; 
    else return idExtractor.getLongValue(getItem(position), position); 
} 

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

    View v = convertView; 
    final GenericViewHolder holder; 
    if (null == v) { 
     LayoutInflater vi = 
       (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(mLayoutResource, null); 
     holder = new GenericViewHolder(); 
     holder.root = v; 


     holder.playPause=(ImageView)v.findViewById(R.id.playPause); 

     FunDapterUtils.initViews(v, holder, mBindDictionary); 

     v.setTag(holder); 


    } else { 
     holder = (GenericViewHolder) v.getTag(); 
    } 

    final T item = getItem(position); 
    showData(item, holder, position); 



    Product m =(Product) mDataItems.get(position); 
    holder.playPause.setImageResource(m.getPlayPauseId()); 
    holder.playPause.setTag(position); 
    holder.playPause.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ((PlayPauseClick)mContext).imageButtonOnClick(v, position);   
     } 
    }); 


     return v; 
    } 

我究竟做錯了什麼?

+0

你在哪裏初始化mContext?請發佈您的完整代碼的適配器。 –

+0

我更新了我的問題 – Majid

+0

再次在哪裏設置適配器的片段?請更新。 –

回答

2
holder.playPause.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ((PlayPauseClick)mContext).imageButtonOnClick(v, position);   
    } 
}); 

MainActivity不能轉換到PlayPauseClick

因此,實現它

public class MainActivity extends AppCompatActivity 
    implements PlayPauseClick { // *** HERE *** // 

    @Override 
    public void imageButtonOnClick(View v, int position) { 
     // TODO: Implement this 
    } 
+0

我在我的片段中創建了我的方法,爲什麼即使我在片段中實現了這個接口,我仍然得到這個CastException?我的意思是我應該在我的MainActivity中也做些什麼? – Majid

+0

因爲'mContext'不能是一個片段 –

+0

謝謝你,但是我有什麼選擇呢,我該如何在我的片段中創建這個方法 – Majid

相關問題