Меня попросили провести рефакторинг кода getView()
, представленного ниже.
У меня есть ListView с пользовательским адаптером. Каждая строка содержит кнопки и тексты, которые можно нажимать.
На данный момент onClickListeners установлены в теле getView()
, это довольно безумная идея, потому что этот метод вызывается очень часто. Внутри каждой функции onClick мне нужен доступ к личным данным для вызова новой активности с помощью bundle.
Как я могу переместить определение onClick за пределы процедуры getView ()?
Когда будет вызываться 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;
}