我有一个名为ResultsAdapter的自定义ArrayAdapter,在用户选择特定行时,应该打开一个详细说明该特定行的新活动。当我使用的适配器是一个简单的ArrayAdapter时,这很好用,但是由于扩展了它并创建了我自己的(在每行中允许多个数据),所以响应每行上的点击的能力已经消失。
我已经缩小了(我认为)这个事实,我需要在我的客户适配器中指定onClickListener
以及它需要做什么,但我不确定要指定什么。以前,大多数“可点击性”是在我使用的自定义ListFragment中处理的。
这是我正在使用的自定义适配器类:
public class ResultsAdapter extends ArrayAdapter<String> {
Context myContext;
public ResultsAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
myContext = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null); //must be overall layout
}
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//this is where the clicking actions need to be defined, right?
}
});
TextView venName = (TextView) convertView.findViewById(R.id.rowName);
TextView venAddress = (TextView) convertView.findViewById(R.id.rowAdd);
venName.setText(VenueList.getVenueName(position));
venAddress.setText(VenueList.getVenueAddress(position));
return convertView;
}
}
这是自定义ListFragment类:
public class ListFragmentClickable extends ListFragment{
private OnItemSelectedListener listener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_results, container, false);
return view;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
updateDetail(position);
}
public interface OnItemSelectedListener {
public void onItemSelected(String name, String geo, String id, String address);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof OnItemSelectedListener) {
listener = (OnItemSelectedListener) activity;
} else {
throw new ClassCastException(activity.toString()
+ " must implement ListFragmentClickable.OnItemSelectedListener");
}
}
public void updateDetail(int position) {
// Get data from VenueList
String name = VenueList.getVenueName(position);
String geo = VenueList.getVenueGeo(position);
String id = VenueList.getVenueId(position);
String address = VenueList.getVenueAddress(position);
listener.onItemSelected(name, geo, id, address);
}
}
任何人都可以帮助指出为什么点击功能丢失了吗?我该如何恢复它?
谢谢!
答案 0 :(得分:0)
显然这与自定义适配器无关,而是与应用程序中的片段实现无关。我必须将xml设置为包含活动的ListView部分的android:clickable="true"
。