2016-09-15 57 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設置爲靜態,並將方法本身設置爲靜態,然後從適配器類調用它以傳遞值。 MainActivity.isFabVisible(布爾值)。

但是,閱讀本文後不建議這樣做。因此,我嘗試使用接口和廣播接收器,但沒有正確實施它們。

關於如何解決這個問題的任何想法?

+0

使用單擊監聽器來監聽mainActivity中發生的列表中的單擊事件。在您的適配器類中創建一個公共方法,該方法應該根據複選框單擊返回一個值true/false。因此,無論何時您點擊某個東西,監聽器都會給您定位,使用您的適配器對象訪問公共方法並決定是否顯示或隱藏晶圓廠。無需爲此使用接口或broadcastreciever。 – 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); 
    } 
} 
相關問題