[英]How to access data in main Activity from a button pressed in listView?
因此,我有一個帶有自定義適配器的listView,我希望每當我按下一個按鈕時,都可以從MainActivity的OnItemClickListener監聽它。
所以我的問題是,當調用ListView中存在的Button的onClick時,我將通過什么內容,以便可以從主Activity中讀取它?
@Override
public View getView(final int pos, View convertView, ViewGroup parent) {
Holder holder = new Holder();
final CustomProductAdapter p=this;
final View rowView;
rowView = inflater.inflate(R.layout.product_list_test, null);
holder.productView=(TextView) rowView.findViewById(R.id.productView);
holder.descView=(TextView) rowView.findViewById(R.id.descView);
holder.imageView=(ImageView) rowView.findViewById(R.id.imageView);
holder.productCost=(TextView) rowView.findViewById(R.id.productCost);
holder.iButton=(ImageButton) rowView.findViewById(R.id.imageButton);
holder.iButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//What will I put here?
}
});
holder.productView.setText(proNames[pos]);
holder.descView.setText(R.string.description_product);
holder.productCost.setText("0.00");
ImageView image =holder.imageView;
imageloader.DisplayImage(images[pos],image);
rowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "You Clicked "+proNames[pos], Toast.LENGTH_SHORT).show();
}
});
return rowView;
}
這樣我就可以從這里讀取它(我不知道這是否是核心方法)
listView = (ListView)findViewById(R.id.listView);
listView.setAdapter(new CustomProductAdapter(this, images, proNames1, desc));
AdapterView.OnItemClickListener mMessageClickedHandler = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
// Do something in response to the click
long ids=v.getId();
if(ids==R.id.imageButton){
Toast.makeText(getBaseContext(),"Button clicked at "+position,Toast.LENGTH_SHORT).show();
}
}
};
listView.setOnItemClickListener(mMessageClickedHandler);
在我的MainActivity.java中。 我是初學者,所以如果我做的不正確,請幫助我。
使用接口進行通信是實現此目的的方法之一。
//create an interface
interface ButtonClickNotify{
void onBUttonClick(int position);
}
然后在主要活動中實施
public calss MainActivity extends AppCompatActivity implements ButtonClickNotify{
//Override the interface method
@Override
public void onButtonClick(int position){
//do something
}
}
然后從適配器調用接口。
//declare an instance variable
ButtonClickNotify buttonNotify;
//Initiate the iterface in the constructor
public MyListAdapter(Context context /*and other parameters*/){
//after other constructor methods including calling super
try{
buttonNotify=(MainActivity)context;
}catch(Throwable e){
//interface is not implemented
}
}
//at the button onclick
holder.iButton.setOnClickListener(new View.OnClickListener{
@Overrride
public void onClick(View v){
try{
buttonNotify.onButtonClick(position);
}catch (Throwable e){
//interface can be null
}
}
});
而且您不需要在rowView
上rowView
onClick
,因為listView.setOnItemClickListener
做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.