2017-02-14 63 views
0

有沒有方法在Imageview(Listview)上設置onClickListener內部活動? 心中已經創造了這個,它在我的適配器工作得很好,但它不是我的工作活動:在Imageview(Listview)上設置onClickListener內部活動

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    playPause=(ImageView)view.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 =productList.get(pos); 
       if (paused) { 
       m.setPlayPauseId(R.drawable.ic_pause); 
       paused=false; 
       }else { 
        m.setPlayPauseId(R.drawable.ic_play); 
        paused = true; 
       }  
       adapter.notifyDataSetChanged(); 
      } 

     }); 

    } 

這是我產品類:

public class Product implements Serializable { 

private int PlayPauseId; 

@SerializedName("pid") 
public int pid; 

@SerializedName("name") 
public String name; 

@SerializedName("qty") 
public int qty; 

@SerializedName("price") 
public String description; 

@SerializedName("image_url") 
public String image_url; 

@SerializedName("date") 
public String date; 



public int getPlayPauseId() { 
    return PlayPauseId; 
} 

public void setPlayPauseId(int playPauseId) { 
    PlayPauseId = playPauseId; 
     } 

    } 

適配器類別(基金會圖書館):

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; 





     FunDapterUtils.initViews(v, holder, mBindDictionary); 

     v.setTag(holder); 


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



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




    return v; 
} 
+1

可以將其設置在適配器類的getView方法。以上將無法正常工作,因爲您正在點擊,點擊listview項目。 –

+0

我認爲刪除onItemClick並直接設置onBindViewHolder在適配器中的imageview點擊 –

+0

@JunaidHafeez我知道它可能無法正常工作..但我堅持在我的活動中這樣做 – DastakWall

回答

0

你可以用兩種方式做到這一點: 做一個接口是這樣的

public interface ImageClick { 
    public imageButtonOnClick(View view, int position) 
} 

在您的活動實現它,並在你的適配器getView,設置imageOnClickListener,並在該onClick中調用此接口方法,傳遞您的位置和視圖,以便您可以在您的位置活動回調。

二是隻在您的活性的方法就像在接口

public imageButtonOnClick(View view, int position) 

在適配器的onClick方法上的ImageView,叫它像

((YourActivity)context).imageButtonOnClick(params1, param2); 
+0

看來你的解決方案將工作,因爲我是Android新手,你可以更好地解釋你的方式「一」與一個例子!?,我會接受你的回答 – DastakWall

+0

請張貼您的適配器代碼。 –

+0

完成........... – DastakWall

0

爲獲得點擊圖像列表視圖在活動本身你必須回調

創建一個接口

public interface OnButtonClickListener { 
public void onButtonClick(int position,View view); 

} 
在actvity類

實現OnButtonClickListener

你得到一個接口methood

@Override 
public void onButtonClick(final int position, View view) { 
    int id = view.getId(); 
    switch (id) { 
     case R.id.YOURIMAGEVIEWID: 
     //implent your process... 
    } 
} 

適配器CALSS創建構造函數適配器類

Context context; 
OnButtonClickListener callback 
public AdapterClass(Context context OnButtonClickListener buttonClickListener) { 
    this.context = context; 
    callback = buttonClickListener; 
} 

圖片點擊

holder.imageView..setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      callback.onButtonClick(position, v); 
     } 
    }); 

在actvity類

AdapterClass Adapter = new AdapterClass(youractivity.this, youractivity.this); 

添加此類回調

public class ListCustomClickEvents implements OnClickListener,View.OnTouchListener { 
private int position; 
private OnCustomClickListener callback; 


// Pass in the callback (this'll be the activity) and the row position 
public ListCustomClickEvents(OnCustomClickListener callback, int pos) { 
    position = pos; 
    this.callback = callback; 
} 

@Override 
public void onClick(View v) { 
    callback.OnCustomClick(v, position); 
} 
} 
相關問題