恐惧会让你失败!作为最帅的猴子,我只想说:“一次不行就再试一次,没有不成功的,只有不争气追求答案的你!”
可以说接口回调折腾了我很长一段时间,不懂原理确实很头疼。
这里我写了个小demo(最简单的方式和写法,希望能帮助大家):
实现:在ListView的Item上点击增加按钮通知Activity设置TextView属性
在适配器调用接口抽象方法并传参,activity实例化接口即可接受值
1、在activity_main.xml中:
<ListView android:id="@+id/lv_call_back" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/tv_num"/> <TextView android:id="@+id/tv_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:text="1" android:textSize="40dp" android:textColor="#fc0519"/>2、ListView的适配器MyAdapter:
public class MyAdapter extends BaseAdapter { private List<String> strList; private Context context; private LayoutInflater inflater; /**监听接口*/ public interface OnItemClickListener { void onItemClick(int position); } private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public MyAdapter(Context context, List<String> strList) { this.context = context; this.strList = strList; inflater = LayoutInflater.from(context); } @Override public int getCount() { return strList.size(); } @Override public Object getItem(int position) { return strList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView == null) { convertView = inflater.inflate(R.layout.item_add_num, null); viewHolder = new ViewHolder(convertView); viewHolder.tvName.setText(strList.get(position)); convertView.setTag(viewHolder); }else{ viewHolder= (ViewHolder) convertView.getTag(); } if(onItemClickListener != null) { viewHolder.btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /**这里用接口调用方法然后传入值*/ onItemClickListener.onItemClick(position); } }); } return convertView; } class ViewHolder { TextView tvName; Button btnAdd; public ViewHolder(View view) { tvName = (TextView) view.findViewById(R.id.tv_name); btnAdd = (Button) view.findViewById(R.id.btn_add_num); } } }3、在MainActivity.java中:
public class MainActivity extends Activity { private ListView lvCallBack; private TextView tvNum; private List<String> strList; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWidget(); initData(); } private void initWidget() { lvCallBack = (ListView) findViewById(R.id.lv_call_back); tvNum = (TextView) findViewById(R.id.tv_num); } private void initData() { strList = new ArrayList<>(); for(int i=0; i<10; i++) { strList.add(i+ "枚金牌"); } myAdapter = new MyAdapter(this, strList); lvCallBack.setAdapter(myAdapter); myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { tvNum.setText("今天增加了" + position + "枚金牌"); } }); } }