2016-03-13 8 views
0

Как я могу реализовать булевский прослушиватель У меня есть собственный listView с изображением, текстом и логическим, но я не могу определить, как установить булевский прослушиватель. Вот несколько фотографий: enter image description hereListView with Switch (boolean) Android

У меня уже есть полноэкранный код, и он отлично работает, но только когда я нажимаю на полноэкранный текст, а не на коммутатор. Любая идея для слушателя Switch?

Вот customview класс

public CustomListViewImageTextText(Activity context, String[]web, String[]web2, Integer[] imageId,boolean[] isChecked){ 
    super(context, R.layout.custom_item_listview_image_text_text, web); 
    this.context = context; 
    this.web = web; 
    this.web2 = web2; 
    this.imageId = imageId; 
    this.isChecked = isChecked; 
} 

@Override 
public View getView (int position, View view, ViewGroup parent){ 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView = inflater.inflate(R.layout.custom_item_listview_image_text_text, null, true); 

    txtTitle = (TextView) rowView.findViewById(R.id.txt); 
    txtSubTitle = (TextView) rowView.findViewById(R.id.subText); 
    imageView = (ImageView) rowView.findViewById(R.id.img); 
    mySwitch = (SwitchCompat) rowView.findViewById(R.id.newswitch); 

    txtTitle.setText(web[position]); 
    txtSubTitle.setText(web2[position]); 
    imageView.setImageResource(imageId[position]); 
    mySwitch.setChecked(isChecked[position]); 

    if (position != 2) { 
     mySwitch.setVisibility(View.GONE); 
    } 
    return rowView; 
} 

А вот часть настройки

CustomListViewImageTextText adapter = new CustomListViewImageTextText(SettingsActivity.this, settingsArray, settingsArray2, imageId, isChecked); 
    myListView = (ListView) findViewById(R.id.settingItems); 
    myListView.setAdapter(adapter); 
    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    } 
}) 
+1

Ваш код выглядит так, будто вы используете пользовательский адаптер. Вы можете достичь того же макета с помощью PreferenceActivity. –

ответ

1

Вы не можете получить это событие следующим образом. Вы инициализируете переключатель onItemClick, чтобы он не запускался в это время. Если вы хотите получить событие смены чека в своей деятельности, то вы сделали статический метод. Чтобы вы могли вызвать этот метод из адаптера при изменении состояния переключателя.

сделать этот метод в своей деятельности:

public static isChecked(boolean flag){ 
    Log.i("TAG,"isChecked:"+flag); 
} 

и добавьте ниже код в ваш метод GetView адаптера:

mySwitch = (SwitchCompat) rowView.findViewById(R.id.newswitch); 
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    <your_activity_name>.isChecked(isChecked); 
    } 
}); 

Примечание: Убедитесь, что это не будет полезно, если есть более одного переключателей доступны в списке. Для этого вам нужно внести несколько изменений, пройдя boolean, а также int (как значение индекса) до isCheckd.

0
Switch sw = (Switch) findViewById(R.id.mySwitch); 
     sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       //Insert your logic here 
      } 
     }); 
+0

Я не могу этого сделать, потому что я пользуюсь пользовательским списком listview из другого класса listview. :( – Chunrand

+0

вы можете объяснить это дальше? Или отредактировать сообщение с объяснением? – Vucko

+0

У меня есть класс SettingsActivity, который обрабатывает элементы listview и класс CustomListView, который имеет пользовательское listview в нем. В SettingsActiviy я устанавливаю адаптер в класс CustomListView. – Chunrand

0

метод Первое использование списка элементов на клик слушателя, чтобы получить элемент щелкнул, а затем определить что третий элемент с назначенным значением или назначенным тегом (нажат полный экран), измените состояние переключателя или сделайте над ним работу