2013-05-29 1 views
2

사용자가 특정 행을 선택하면 해당 행을 자세히 설명하는 새 활동을 열어야하는 ResultsAdapter라는 사용자 지정 ArrayAdapter가 있습니다. 이것은 내가 사용하는 어댑터가 단순한 ArrayAdapter 였을 때 효과적 이었지만 확장되고 각 행에 여러 개의 데이터 조각을 허용하기 위해 자체적으로 만들었 기 때문에 각 행의 클릭에 응답하는 기능이 사라졌습니다.사용자 지정 ArrayAdapter가 ListFragment 행을 클릭에 응답하지 않게했습니다.

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

분명히 이것은 사용자 정의 어댑터와 관련이 없으며 오히려 응용 프로그램의 조각 구현과 관련이 있습니다. 액티비티의 ListView 부분에 android:clickable="true"을 포함하도록 xml을 설정해야했습니다.

관련 문제