自定义ArrayAdapter使我的ListFragment行不响应点击

时间:2013-05-29 02:49:29

标签: android android-arrayadapter android-listfragment

我有一个名为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);
  }

}

任何人都可以帮助指出为什么点击功能丢失了吗?我该如何恢复它?

谢谢!

1 个答案:

答案 0 :(得分:0)

显然这与自定义适配器无关,而是与应用程序中的片段实现无关。我必须将xml设置为包含活动的ListView部分的android:clickable="true"