listView=(ListView)findViewById(R.id.list);
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View viewItem, int position, long arg3) {
if(!itemClicked)
{
viewItem = parent.getChildAt(position);
//start >> This might be where your problem is (R.id.gov)
((Button)viewItem.findViewById(R.id.gov)).setVisibility(View.VISIBLE);
//end <<
((Button)viewItem.findViewById(R.id.re)).setVisibility(View.VISIBLE);
viewItem.invalidate();
itemClicked=true;
clickedItemPos=position;
TextView text = (TextView)viewItem.findViewById(R.id.item);
ime = text.getText();
}
else
{
viewItem=parent.getChildAt(clickedItemPos);
((Button)viewItem.findViewById(R.id.go)).setVisibility(View.INVISIBLE);
((Button)viewItem.findViewById(R.id.re)).setVisibility(View.INVISIBLE);
viewItem = parent.getChildAt(position);
((Button)viewItem.findViewById(R.id.go)).setVisibility(View.VISIBLE);
((Button)viewItem.findViewById(R.id.re)).setVisibility(View.VISIBLE);
viewItem.invalidate();
clickedItemPos=position;
TextView text = (TextView)viewItem.findViewById(R.id.item);
ime = text.getText();
}
final int[] coordAndCat = FavoriteCoord(ime.toString());
Я думаю, что вы сказали R.id.gov вместо R.id.go, если R.id.gov не является действительно вашим идентификатором.Это единственное, что я увидел «неправильно», пожалуйста, покажите в стеке трассировку для ошибки в следующий раз, это поможет в отладке =)
РЕДАКТИРОВАТЬ clickedItemPos инициализируется где-то еще?потому что, если это не эта строка: viewItem=parent.getChildAt(clickedItemPos);
в вашем выражении else, вероятно, будет нулевым, если ничего не было выбрано ранее.Я понимаю, что вы хотите использовать это для проверки ранее нажатых элементов, но если ничего не было щелкнуто ранее, для этого никогда не будет установлено значение и, следовательно, будет null, попробуйте сделать это в этом операторе else, чтобы избежать возможной переменной null:
else
{
if(clickedItemPos != null){ //only add this if there was a previous clicked item
viewItem=parent.getChildAt(clickedItemPos);
((Button)viewItem.findViewById(R.id.go)).setVisibility(View.INVISIBLE);
((Button)viewItem.findViewById(R.id.re)).setVisibility(View.INVISIBLE);
viewItem = parent.getChildAt(position);
((Button)viewItem.findViewById(R.id.go)).setVisibility(View.VISIBLE);
((Button)viewItem.findViewById(R.id.re)).setVisibility(View.VISIBLE);
viewItem.invalidate();
clickedItemPos=position;
TextView text = (TextView)viewItem.findViewById(R.id.item);
ime = text.getText();
}else{
viewItem = parent.getChildAt(position);
((Button)viewItem.findViewById(R.id.go)).setVisibility(View.VISIBLE);
((Button)viewItem.findViewById(R.id.re)).setVisibility(View.VISIBLE);
viewItem.invalidate();
clickedItemPos=position;
TextView text = (TextView)viewItem.findViewById(R.id.item);
ime = text.getText();
}
}
, надеюсь, это исправит это.В вашей трассировке стека написано, что строка 91 в вашем классе является строкой, вызывающей ошибку, какая переменная находится в этой строке?обычно это хороший индикатор того, какая переменная вызывает нулевой указатель, но поскольку мы не знаем номеров строк для вашего кода, трудно догадаться, в чем проблема.
Да, в коде есть повторяющийся код.это решение, но вы всегда можете создать метод, чтобы вставить повторный код и вызвать его, если хотите.
Удачи, надеюсь, это поможет.