java - 如何通过 listView 中按下的按钮访问主 Activity 中的数据?

标签 java android listview custom-adapter

所以我有一个带有自定义适配器的 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 中。我是初学者,如果我做得不对,请帮助我。

最佳答案

使用接口(interface)进行通信是实现这一目标的方法之一。

//create an interface
interface ButtonClickNotify{
   void onBUttonClick(int position);
}

然后在主 Activity 中实现它

public calss MainActivity extends AppCompatActivity implements ButtonClickNotify{

    //Override the interface method
    @Override
    public void onButtonClick(int position){
        //do something
    }
}

然后从适配器调用接口(interface)。

//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 上使用 onClick,因为 listView.setOnItemClickListener 的作用相同。

关于java - 如何通过 listView 中按下的按钮访问主 Activity 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37759150/

相关文章:

java - 创建数组时堆空间不足

android - Eclipse 中的 Android 导出项目如何工作?

java - 在我的几乎所有脚本中使用相同的自定义方法

Android SimpleCursorAdapter + ListView 不工作

android - 将数据加载到 ExpandableListView

java - 如何使用自动链接 :phone? 让一个字符串中的多个电话号码可点击

java - 在 Javafx 中,从数据库填充 TableView 后按钮停止工作

java - GridView 超出内存预算

android - 切换按钮,禁用更改状态 onClick

wpf - WPF GridViewItem 控件的默认前景色是什么?