如何从适配器类获取值到活动类

时间:2017-09-24 13:13:47

标签: android baseadapter

我正在上adapter课程,我需要将invoiceId传递给Activity课程。我已经看到了一些像传递接口这样的例子,但是我在跟踪代码过程时失去了轨道。

这是我的适配器类扩展BaseAdapter

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    companyName = ct.getSharedPreferences("prefs", 0);
    Log.d("test", "" + deliveryListBeans.size());
    LayoutInflater inflater = (LayoutInflater) ct.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.list_vew_for_delivery_order, null);
    TextView invoice = (TextView) v.findViewById(R.id.invoice);
    final TextView delivery = (TextView) v.findViewById(R.id.do_delivery);
    final DeliveryListBean dlb = deliveryListBeans.get(position);
    invoice.setText(dlb.getInvoiceNo());
}
delivery.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ct.startActivity(new Intent(ct, EmployeesListForPopUp.class));
            DeliveryOrdersListAdapter deliveryOrdersListAdapter=new DeliveryOrdersListAdapter(EmployeesListForPopUp.this);


        }
    });
}

这是我的活动类

public class EmployeesListForPopUp extends Activity {


private List<EmployeeIdNameBean> employeeIdNameBeans = new ArrayList<EmployeeIdNameBean>();
ListView listView;
SharedPreferences companyName;
EmployeePopUpAdapter employeePopUpAdapter;
private ImageView img1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_employees_list_for_pop_up);

我需要从Adapter Class获取invoiceId。怎么样?

3 个答案:

答案 0 :(得分:0)

您需要在适配器构造函数中传递活动的上下文。

然后在适配器的clickevents中设置activity.invoiceid值。

答案 1 :(得分:0)

一种简单的方法是在MainActivity中编写一个方法

public void setInvoiceId(int invoiceId) {
    // do what you want with invoiceId
}

并将您的活动实例传递给适配器

DeliveryOrdersListAdapter adapter = new DeliveryOrdersListAdapter(EmployeesListForPopUp.this);

并在适配器中获取并保留

EmployeesListForPopUp myActivity;

public MyAdapter(EmployeesListForPopUp activity) {
    myActivity = activity;
}

您需要传递invoiceId的地方只需调用主要活动的方法

myActivity.setInvoiceId(invoiceId);

答案 2 :(得分:0)

实施它的一般方法:

  1. 在适配器类中,您将文本设置为发票TextView,您还可以为其添加标记。注意 - 尽管列表中的每个项目都是使用相同的原型构建的,但标记(以及文本)将是uniq。最好的方法是使用“position”作为标记的值:invoice.setText(dlb.getInvoiceNo());
  2. invoice.setTag(Integer.valueOf(位置)的ToString());

    1. 您需要使列表中的项目可单击(这超出了本问题的范围)。因此,当您单击某个项目时 - 您可以检索它具有的任何数据,特别是标记 - getTag();.

    2. 然后您将Intent发送到其他活动,将标记作为额外消息提供。因此,该活动将“知道”与其相关的数组列表中的哪个项目(即tag == position,right?)。并从那里继续。

    3. 我实施了一个简单的项目来说明它。这个项目是使用ArrayList适配器的简单演示和说明, 在ListView中显示该项目,单击某个项目并在分离的活动中显示相关数据。请下载并尝试(最低API 21)。 README文件中提供了基本描述。 该项目在GitHub上:

      (纠正路径)

      https://github.com/everall77/ArrayListSimpleExmpl