【问题标题】:Footer button in listview, how to get value from custom list adapter列表视图中的页脚按钮,如何从自定义列表适配器中获取值
【发布时间】:2016-03-02 11:19:13
【问题描述】:

我在每一行都有一个带有切换按钮的列表视图。我将检查开关的总和存储在变量中。在我启动自定义适配器的 MainActivity 中,我想获得检查开关的总和。那么如何将值从自定义适配器传递给父活动?在 listview 的页脚中,我有一个按钮“Dalej”,我在 MainActivity 中创建了它,并希望在用户单击它时从适配器获取值(这个总和)?

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cardio);
    String[] cardio_1 = getResources().getStringArray(R.array.cardio_1);
    ListView listView = (ListView) findViewById(R.id.listView);

    View footer = getLayoutInflater().inflate(R.layout.cardio_footer, null);
    listView.addFooterView(footer);
    ListAdapter listAdapter = new Adapter_cardio(this, cardio_1);
    cardio.addAll(Arrays.asList(cardio_1))
    listView.setAdapter(listAdapter);

    final Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

    });

适配器

   public Adapter_cardio(Context context,  String[] cardios ) {

    super(context, R.layout.cardio_row, cardios);
    this.context = context;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Log.d("TAG", "tessst1");
    zaznaczone = new ArrayList();
}

public String suma(String sum) {
    return sum;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    String pytanie = getItem(position);


    if (convertView==null){
        convertView = inflater.inflate(R.layout.cardio_row, null);
        holder = new ViewHolder();
        holder.question = (TextView) convertView.findViewById(R.id.question);
        holder.s = (Switch)convertView.findViewById(R.id.switch1);
        convertView.setTag(holder);
    }
    else{
        holder = (ViewHolder) convertView.getTag();
    }
    holder.question.setText(pytanie);
    //Model_cardio question = getItem(position);
    //final boolean doCheck = (position == 4) || (position == 5);


    holder.s.setTag(position);
    holder.s.setOnCheckedChangeListener(null);
    if (zaznaczone.contains(position) )
    {
        holder.s.setChecked(true);
    }
    else
    {
        holder.s.setChecked(false);
    }

    holder.s.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                zaznaczone.add((Integer) buttonView.getTag());
            } else {
                zaznaczone.remove((Integer) buttonView.getTag());
            }

        }
    });
    sum = zaznaczone.size();
    String x = "2";
    Log.d("TAG_Switch_all", "suma = " + sum);

    return convertView;
}

【问题讨论】:

    标签: android listview android-listview adapter custom-adapter


    【解决方案1】:

    想在用户点击时从适配器获得价值(这个总和)?

    创建一个方法为public,它从Adapter_cardio类返回sum

    public int getSum(){
    
     return zaznaczone.size();
    }
    

    并在按钮单击时调用getSum 方法,使用listAdapter 对象作为:

    public void onClick(View v) {
         Log.d("TAG_Switch_all", "suma = " + ((Adapter_cardio)listAdapter).getSum());
     }
    

    如果 listAdapter 在 onClick 方法中不可访问,则将其声明为 final

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      相关资源
      最近更新 更多