我看了很多类似的问题,似乎没有任何工作.我有一个这样的功能的主类,编辑显示一个对话框,然后编辑一个按钮时的列表.
public class EditPlayers extends SherlockFragmentActivity { listPlayerNames.setAdapter(new EditPlayerAdapter(ctx,R.layout.score_row_edit_player,listscoreEdit)); public void deletePlayer(final int position) { AlertDialog.Builder alertDialog = new AlertDialog.Builder( EditPlayers.this); // Setting Dialog Title alertDialog.setTitle("Delete Player"); // Setting Dialog Message alertDialog.setMessage("Are you sure?"); // Setting Delete Button alertDialog.setPositiveButton("Delete",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { listscoreEdit.remove(position); updateListView(); } }); // Setting Cancel Button alertDialog.setNeutralButton("Cancel",int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } }
如何从适配器中的getView()访问该函数?这是这行的XML
<TextView android:id="@+id/nameEdit" android:layout_width="0dp" android:layout_height="wrap_content" android:paddingBottom="10dp" android:paddingTop="10dp" android:paddingLeft="10dp" android:layout_weight="70" android:text="Name" android:textColor="#666666" android:textSize="22sp" android:textStyle="bold" > </TextView> <Button android:id="@+id/deletePlayer" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="30" android:text="Delete" android:focusable="false" />
这是getView()
@Override public View getView(final int position,View convertView,ViewGroup parent) { convertView = (LinearLayout) inflater.inflate(resource,null); score score = getItem(position); TextView txtName = (TextView) convertView.findViewById(R.id.nameEdit); txtName.setText(score.getName()); Button b = (Button)convertView.findViewById(R.id.deletePlayer); b.setTag(position); b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //call function here } }); return convertView; }
我完全失去了这一点,所以任何帮助将不胜感激.谢谢!
解决方法
我建议您提供一个返回到您的活动的界面,让它知道按下该按钮.我不建议从ArrayAdapter调用活动的方法.它太紧耦合了.
尝试这样的东西:
你的活动
public class EditPlayers extends SherlockFragmentActivity implements EditPlayerAdapterCallback { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EditPlayerAdapter adapter = new EditPlayerAdapter(this,listscoreEdit); adapter.setCallback(this); listPlayerNames.setAdapter(adapter); } private void deletePlayer(final int position) { AlertDialog.Builder alertDialog = new AlertDialog.Builder( EditPlayers.this); // Setting Dialog Title alertDialog.setTitle("Delete Player"); // Setting Dialog Message alertDialog.setMessage("Are you sure?"); // Setting Delete Button alertDialog.setPositiveButton("Delete",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { listscoreEdit.remove(position); updateListView(); } }); // Setting Cancel Button alertDialog.setNeutralButton("Cancel",int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } @Override public void deletePressed(int position) { deletePlayer(position); } }
适配器:
public class EditPlayerAdapter extends ArrayAdapter { private EditPlayerAdapterCallback callback; @Override public View getView(final int position,ViewGroup parent) { convertView = (LinearLayout) inflater.inflate(resource,null); score score = getItem(position); TextView txtName = (TextView) convertView.findViewById(R.id.nameEdit); txtName.setText(score.getName()); Button b = (Button)convertView.findViewById(R.id.deletePlayer); b.setTag(position); b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(callback != null) { callback.deletePressed(position); } } }); return convertView; } public void setCallback(EditPlayerAdapterCallback callback){ this.callback = callback; } public interface EditPlayerAdapterCallback { public void deletePressed(int position); } }