Android的 - 从主要活动的ListView刷新/更新在那里它被称为 [英] Android - ListView refresh/update from the Main Activity where it is called

查看:82
本文介绍了Android的 - 从主要活动的ListView刷新/更新在那里它被称为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有变式,单位和数量列出了产品的价值的应用程序。

I have an application that lists the values of a product by Variant, Unit, and Quantity.

我有其中显示ListView的一个活动:

I have an activity where the ListView is shown:

public class OrderForm extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order_form);

        ArrayList image_details = getListData();
        final ListView lv1 = (ListView) findViewById(R.id.custom_list);
        lv1.setAdapter(new CustomListAdapter(this, image_details));


    }

    private ArrayList getListData() {

        ArrayList results = new ArrayList();
        OrderDetailsClass orderData = new OrderDetailsClass();

        return results;
    }

    public void onAddItem(View view){

        ArrayList results = new ArrayList();
        OrderDetailsClass orderData = new OrderDetailsClass();

        orderData = new OrderDetailsClass();
        orderData.setVariants("Flavored");
        orderData.setUnit("cans");
        orderData.setQuantity(1);
        results.add(orderData);

        //selectVariant();
        //selectUnit();
        //selectQuantity();

    }
}

这是我的CustomAdapter

This is my CustomAdapter

public class CustomListAdapter extends BaseAdapter {

  private ArrayList<OrderDetailsClass> listData;

  private LayoutInflater layoutInflater;

      public CustomListAdapter(Context context, ArrayList<OrderDetailsClass> listData) {
    this.listData = listData;
    layoutInflater = LayoutInflater.from(context);
  }

  @Override
  public int getCount() {
    return listData.size();
  }

  @Override
  public Object getItem(int position) {
    return listData.get(position);
  }

  @Override
  public long getItemId(int position) {
    return position;
  }

  public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
        holder = new ViewHolder();
        holder.variantView = (TextView) convertView.findViewById(R.id.variant);
        holder.unitView = (TextView) convertView.findViewById(R.id.unit);
        holder.quantityView = (TextView) convertView.findViewById(R.id.quantity);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.variantView.setText(listData.get(position).getVariants());
    holder.unitView.setText("By, " + listData.get(position).getUnit());
    holder.quantityView.setText(String.valueOf(listData.get(position).getQuantity()));

    return convertView;
}

static class ViewHolder {
    TextView variantView;
    TextView unitView;
    TextView quantityView;
}

  public void updateResults(ArrayList<OrderDetailsClass> results) {
    listData = results;
      //Triggers the list update
      notifyDataSetChanged();
  }

}

这是list_row_layout

This is list_row_layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<!-- 
android:minHeight="50dp"
android:orientation="horizontal"
android:padding="5dip" 
 -->

<TextView
    android:id="@+id/variant"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="variant" />

<TextView
    android:id="@+id/unit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="unit" />

<TextView
    android:id="@+id/quantity"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="quantity" />

</RelativeLayout>

这是activity_order_form

This is the activity_order_form

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<ListView
    android:id="@+id/custom_list"
    android:layout_width="fill_parent"
    android:layout_height="386dp"
    android:dividerHeight="1dp" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:onClick="onAddItem"
    android:text="Add" />

</RelativeLayout>

我想要做的是,当我preSS的 onAddItem 功能,数据已经被添加之后,在ListView将刷新并显示变化。到目前为止,我所看到的是, notifyDataSetChanged()被在 BaseAdapter 类使用。我已经试过了,但似乎 notifyDataSetChanged()应该在 BaseAdapter 叫,我希望能够以从我的 OrderForm 活动刷新。

What I want to do is that when I press the onAddItem function, after the data has been added, the ListView will refresh and display the changes. So far, what I've seen is that notifyDataSetChanged() being used in the BaseAdapter class. I've tried it but it seems that notifyDataSetChanged() should be called within BaseAdapter, I want to be able to refresh from my OrderForm activity.

任何想法?

感谢。

推荐答案

请OrderForm活动的CustomAdapter参考:

Keep a reference to your CustomAdapter in OrderForm activity:

public class OrderForm extends Activity {

CustomListAdapter customListAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_order_form);

    ArrayList image_details = getListData();
    final ListView lv1 = (ListView) findViewById(R.id.custom_list);
    customListAdapter = new CustomListAdapter(this, image_details);
    lv1.setAdapter(customListAdapter);
}

然后就可以调用 customAdapter.notifyDataSetChanged()。这是适配器上的公共方法,以便可以从活动就好调用它。

Then you can call customAdapter.notifyDataSetChanged(). This is a public method on the adapter so you can call it from the activity just fine.

这篇关于Android的 - 从主要活动的ListView刷新/更新在那里它被称为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆