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); 
    } 

사용자가 내가 팹 버튼을 볼 수 있도록하려는 그들이 선택을 취소 할 때, 눈에 보이지 않는이 될 수있는 체크 박스를 선택 그래서.

내가 처음에 한 것은 주 활동에서 공용 방법을 만드는 것이 었습니다. 팹을 정적으로 설정하고 메소드 자체를 정적으로 설정 한 다음 값을 전달하는 어댑터 클래스에서 호출합니다. MainActivity.isFabVisible (부울 값)입니다.

그러나 이것을 읽은 후 권장되는 방법은 아닙니다. 따라서 인터페이스 및 브로드 캐스트 리시버를 사용해 보았지만 제대로 구현하지 못했습니다.

해결 방법에 대한 아이디어가 있으십니까?

+0

mainActivity에서 발생하는 클릭을 청취하려면 클릭 수신기를 사용하십시오. 체크 박스 클릭에 따라 true/false 설정 값을 반환해야하는 어댑터 클래스에 공용 메서드를 만듭니다. 따라서 무언가를 클릭 할 때마다 청취자가 위치를 제공하고 어댑터 객체를 사용하여 public 메소드에 액세스하고 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); 
    } 
} 
관련 문제