我正在尝试将自定义列表适配器中的值传递给我的主要活动。 基本上我有一个带复选框的列表。当用户选择一个复选框时,我想要一个我之前设置为不可见的按钮才能看到。如果用户取消选中列表项,我希望该按钮再次不可见。
我的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; }
}
}
我的主要活动:
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按钮可见,当他们取消选中它时,看不见。
我最初做的是在主要活动中创建一个公共方法。将fab设置为static,将方法本身设置为static,然后从适配器类中调用它,向其传递值。 MainActivity.isFabVisible(布尔值)。
然而,在阅读之后,这不是推荐的方法。因此,我尝试使用接口和广播接收器,但没有运气正确实现它们。
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
你可以试试这个:
在您的适配器f(1) = 1
f(2) = 3
f(X) = 2*f(X-1) – 2*f(X-2) for X = 3,4,5,...
上设置此项,以检查其是否已选中。 true 和 false 分别与已检查或的选中强>
package p1parta;
import java.util.Scanner;
public class RecursiveSeq
{
public static void main(String args[])
{
System.out.println("Please enter a number:");
Scanner input = new Scanner(System.in);
int x = input.nextInt();
System.out.println(sequence(x));
}
public static int sequence(int x)
{
if(x == 1){
return 1;
}
if (x == 2){
return 3;
}
return 2 * sequence(x - 1) - 2 * sequence(x - 2);
}
}
在你班上:
checkedchangeListener