아래와 같이 getView()
코드를 리팩터링하도록 요청 받았습니다.getView()에서 onClick onClickListner 설정을 피하는 방법
사용자 지정 어댑터가있는 ListView가 있습니다. 모든 행에는 클릭 가능한 버튼과 텍스트가 있습니다.
getView()
본문에 onClickListeners가 설정되어있는 지금이 메서드는 매우 자주 호출되기 때문에 이것은 매우 이상한 생각입니다. 모든 onClick 함수 내부에서 번들로 새 활동을 호출하기 위해 개인 데이터에 액세스해야합니다.
어떻게 getView() 루틴 외부에서 onClick 정의를 이동할 수 있습니까?
onClick을 호출 할 때 목록 요소의 위치 (개인 데이터에 액세스하기 위해)와 클릭 한 뷰 (정확한 활동 시작)에 대한 정보가 필요합니다.
public View getView(int position, View convertView, ViewGroup parent) {
if(convertview == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.photo_tweet_row, null);
}
TextView userTweet = (TextView) v.findViewById(R.id.feed_user_tweet_body);
RepliesButton repliesBtn = (RepliesButton) v.findViewById(R.id.feed_replies_button);
Status twitterDataItem = getItem(position);
if (twitterDataItem != null) {
if (userTweet != null) {
userTweet.setText(twitterDataItem.getText());
}
if (repliesBtn != null) {
repliesBtn.setText(" replies");
}
userTweet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getContext(), ProfileActivity.class);
intent.putExtra(getContext().getString(R.string.serializable_user), twitterDataItem.getUser());
getContext().startActivity(intent);
}
});
repliesBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (!twitterDataItem.getComments().contentEquals("0")) {
Intent myIntent = new Intent(getContext(), RepliesToFeedActivity.class);
myIntent.putExtra("photoTweet", twitterDataItem);
getContext().startActivity(myIntent);
}
}
});
}
return convertView;
}
여기서 getContext()는 무엇입니까? 나는 비슷한 목록보기에서 일하고있다. –