2015-04-27 5 views
1

Я столкнулся с странным поведением в моем андроиде ListView: я отключил флажки в каждой строке. Когда я нажимаю на строку, кажется, что флажки возвращаются для включения в течение короткого времени перед запуском следующего действия (результат щелчка).Android ListView щелкнуть все флажки с включенными

Вот предыдущий щелчок и после щелчка: Before click Just after click

stationsfavoritesadapter.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:descendantFocusability="blocksDescendants"> 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="horizontal" android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:background="@drawable/listviewborder"> 

     <CheckBox 
      android:id="@+id/favorite_checkbox" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="?android:attr/starStyle" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:enabled="false" 

      /> 

     <ImageView 
      android:id="@+id/weatherimage" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@id/favorite_checkbox" 
      /> 

     <TextView 
      android:id="@+id/StationNameText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@id/weatherimage" 
      android:layout_alignTop="@id/weatherimage" 
      android:textStyle="bold" 
      /> 

     <TextView 
      android:id="@+id/temperatureText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@id/weatherimage" 
      android:layout_below="@id/StationNameText" 
      /> 

     <TextView 
      android:id="@+id/trailsText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/StationNameText" 
      android:layout_alignParentRight="true" 
      android:layout_marginRight="5dp" 
      /> 



    </RelativeLayout> 

</RelativeLayout> 

Вот класс адаптера с помощью метода getView():

public class StationsFavoritesAdapter extends StationsAdapter{ 

    public StationsFavoritesAdapter(StationsManager stations) 
    { 
     _stationManager = stations; 
     _data = new ArrayList<Map.Entry<String, Station>>(); 
     _data.addAll(_stationManager.GetFavorites().entrySet()); 

     _stationFilterList = _data; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     final View result; 
     if (convertView == null) 
     { 
      result = LayoutInflater.from(parent.getContext()).inflate(R.layout.stationsfavoritesadapter, parent, false); 
     } 
     else 
     { 
      result = convertView; 
     } 

     final Map.Entry<String, Station> station = getItem(position); 

     ((TextView) result.findViewById(R.id.temperatureText)).setText(station.getValue().get_temperature() + "°C"); 
     ((TextView) result.findViewById(R.id.StationNameText)).setText(station.getKey()); 
     ((TextView) result.findViewById(R.id.trailsText)).setText(station.getValue().get_trails().first + "/" + station.getValue().get_trails().second); 

     CheckBox favoriteBox = (CheckBox)result.findViewById(R.id.favorite_checkbox); 

     favoriteBox.setChecked(true); 


     ImageView image = (ImageView)result.findViewById(R.id.weatherimage); 

     if(station.getValue().get_weather().equals("sunny")) 
     { 
      image.setImageResource(R.mipmap.sunnyicon); 
     } 
     else if(station.getValue().get_weather().equals("storm-clouds")) 
     { 
      image.setImageResource(R.mipmap.snowicon); 
     } 
     else 
     { 
      image.setImageResource(R.mipmap.cloudyicon); 
     } 

     return result; 
    } 


} 

И событие списка ListView:

@Override 
public void onListItemClick(ListView parent, View w, int position, long id) 
{ 
    String stationName = adapter.getItem(position).getKey(); 
    Intent intent = new Intent(this, StationActivity.class); 
    Bundle b = new Bundle(); 
    b.putString("Station name", stationName); 
    intent.putExtras(b); 

    startActivity(intent); 
} 

Спасибо за ваше время.

+0

Я не понимаю, что делает ваша программа и чего вы хотите достичь. Вы можете объяснить мне свою идею, пожалуйста? –

+0

У меня есть список в действии, каждая строка содержит отключенный флажок. Когда я нажимаю на одну строку, кажется, что флажки активируются на короткое время (их изменение цвета). Почему они включены, когда я просто нажимаю в строке списка списка. – user1594047

+0

Можете ли вы дать мне очень маленький образец ArrayList >(), который вы используете для заполнения списка? Просто небольшой пример –

ответ

0

Ваши функции getView называются eveytime, когда приложение рисует представление списка. Я думаю, что вы хотите сделать, это сделать onclicklistener на вашем списке установите флажок, чтобы верно там, а не в GetView

Используйте этот код в вашей деятельности или фрагмента

listView1.setOnItemClickListener(new. OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, 
         long id) { 



       } 
      }); 
+0

no box всегда должен быть проверен, и я проверяю при отладке getView после вызова не вызывается. Поэтому клик не должен изменять статус флажка. – user1594047

+0

Почему это в вашем getView. favoriteBox.setChecked (истина); –

+0

Я хочу, чтобы они всегда были правдой и отключены. Это оно. – user1594047

0

Вы могли бы попробовать установив флажок отключен из вашего метода getView в адаптере, после того как вы установили флажок:

@Override 
    public View getView(int position, View convertView, ViewGroup parent){ 

    CheckBox favoriteBox =(CheckBox)result.findViewById(R.id.favorite_checkbox); 

    favoriteBox.setChecked(true); 
    favoriteBox.setEnabled(false); 
+0

Он делает тот же результат, я уже пробовал. – user1594047

Смежные вопросы