사용자 지정 목록 어댑터에서 내 주요 활동으로 값을 전달하려고합니다. 기본적으로 확인란이있는 목록이 있습니다. 사용자가 확인란을 선택하면 이전에 보이지 않게 설정 한 버튼이 표시됩니다. 사용자가 목록 항목을 선택 취소하면 단추가 다시 보이지 않게됩니다.사용자 지정 목록 어댑터에서 주 활동으로 값을 전달하는 방법
내 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 (부울 값)입니다.
그러나 이것을 읽은 후 권장되는 방법은 아닙니다. 따라서 인터페이스 및 브로드 캐스트 리시버를 사용해 보았지만 제대로 구현하지 못했습니다.
해결 방법에 대한 아이디어가 있으십니까?
mainActivity에서 발생하는 클릭을 청취하려면 클릭 수신기를 사용하십시오. 체크 박스 클릭에 따라 true/false 설정 값을 반환해야하는 어댑터 클래스에 공용 메서드를 만듭니다. 따라서 무언가를 클릭 할 때마다 청취자가 위치를 제공하고 어댑터 객체를 사용하여 public 메소드에 액세스하고 fab 표시 또는 숨기기 여부를 결정합니다. 이를 위해 인터페이스 나 브로드 캐스트 레 이버를 사용할 필요가 없습니다. – HourGlass