2016-09-15 2 views
1

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

Мой ListAdapter:

public class ListAdapter extends BaseAdapter 
{ 
    private Context mContext; 
    private ArrayList<Boolean> bool = new ArrayList<Boolean>(); 

    public ListAdapter(final Activity context) 
    { 
     mContext = context; 

     for(int i = 0; i < ListAdapter.this.getCount(); i++) 
     { 
      bool.add(i, false); 
     } 

    } 

    @Override 
    public int getCount() 
    { 
     return AppContent.ITEMS.size(); 
    } 

    @Override 
    public Object getItem(int position) 
    { 
     return AppContent.ITEMS.get(position); 
    } 

    @Override 
    public long getItemId(int position) 
    { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup  parent) 
    { 
     AppInfo holder; 

     //Get the item at the current position 
     final AppContent.AppInfo item = AppContent.ITEMS.get(position); 

     if (convertView == null) 
     { 
      //Create the row 
      final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.installed_list_row_layout, parent, false); 

      holder = new AppInfo(); 

      //Set data to the different views 
      holder.txtAppName = (TextView) convertView.findViewById(R.id.txtAppName); 

      convertView.setTag(holder); 
     } 
     else 
     { 
      holder = (AppInfo) convertView.getTag(); 
     } 

     final CheckBox chk = (CheckBox) convertView.findViewById(R.id.chkUninstall); 
     chk.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       //Init chkbox 
       CheckBox cb = (CheckBox) v.findViewById(R.id.chkUninstall); 

       if (cb.isChecked()) 
       { 
        bool.set(position, true); //Gets whether the checkbox is checked 
       } 
       else if (!cb.isChecked()) 
       { 
        bool.set(position, false); //Gets whether the checkbox is checked 
       } 
      } 
     }); 

     //All the position values MUST be set before returning the row 
     chk.setChecked(bool.get(position)); 

     if(item != null) 
     { 
      //Set data to the different views 
      holder.txtAppName.setText(item.appName); 
     } 

     return convertView; 
    } 

    static class AppInfo 
    { 
     TextView txtAppName; 
    } 

    public class CheckedValues 
    { 
     public ArrayList<Boolean> checkedValues() { return bool; } 
    } 
} 

Мой MainActivity:

public class MainActivity extends AppCompatActivity 
{ 
    Context context; 
    FloatingActionButton fab; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     context = MainActivity.this; 

     ListView lv = (ListView) findViewById(R.id.appListView); 
     lv.setDivider(null); 
     ListAdapter la = new ListAdapter(MainActivity.this); 
     lv.setAdapter(la); 

     //Floating Action Button for uninstalling applications 
     fab = (FloatingActionButton) findViewById(R.id.fab); 

     //Disappear the button until the user makes a selection. 
     fab.setVisibility(View.INVISIBLE); 
    } 

Таким образом, когда пользователь выбирает опцию Я хочу кнопку ФАБ быть видимым и когда они снимите его, чтобы быть невидимым.

Сначала я создал публичный метод в основном действии. Установите fab в static, а сам метод - в static, затем вызовите его из класса адаптера, передав ему значение. MainActivity.isFabVisible (логическое значение).

Однако после прочтения это не рекомендуется. Поэтому я пробовал использовать интерфейсы и широковещательные приемники, но им не удавалось правильно их реализовать.

Любые идеи о том, как это решить?

+0

Используйте прослушиватель кликов, чтобы прослушать клик, который происходит в списке, из mainActivity. создайте общедоступный метод в своем классе адаптера, который должен вернуть значение true/false в соответствии с щелчком по кнопке. Поэтому всякий раз, когда вы нажимаете что-то, слушатель будет давать вам позицию, использовать объект-адаптер для доступа к общедоступному методу и решать, показывать или скрывать fab. нет необходимости использовать интерфейс или трансляцию для этого. – HourGlass

ответ

0

Вы можете попробовать это:

набор это на вашем адаптере checkedchangeListener, чтобы проверить его проверили ли not.Set истинным и ложные соответствующие для Проверено или бесконтрольно

if(mContext instanceof MainActivity){ 
       ((MainActivity)mContext).setMyVisibility(true); 
      } 

В вашем классе:

public void setMyVisibility(Boolean value); 
{ 
    if(value) 
    { 
    fabButton.setVisibility(View.VISIBLE);} 
    else 
    { 
    fabButton.setVisibility(View.GONE); 
    } 
} 
Смежные вопросы