2

ユーザーが特定の行を選択すると、その特定の行の詳細を示す新しいアクティビティを開く必要がある、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);
  }

}

クリックする機能が失われた理由を教えてくれる人はいますか? どうすれば復元できますか?

ありがとう!

4

1 に答える 1

0

どうやら、これはカスタム アダプターとは関係なく、アプリでのフラグメントの実装とは関係ありません。android:clickable="true"アクティビティの ListView 部分に含める xml を設定する必要がありました。

于 2013-05-30T04:12:58.680 に答える