ArrayList问题

时间:2011-08-11 16:13:00

标签: java android eclipse

我是Java编程的新手,并且正在按照这里的教程进行操作:http://coenraets.org/blog/android-samples/androidtutorial/ 复制代码的地方我在这里遇到问题:http://code.google.com/p/androidtutorial/source/browse/trunk/%20androidtutorial/EmployeeDirectory6/src/samples/employeedirectory/EmployeeDetails.java

编辑:谢谢大家。感谢@adamcodes指出我完全错过了他推出源代码的链接。看起来他忘了在逐步教程中包含该链接。

大约25行,我在

收到错误
protected ArrayList<EmployeeAction> actions;

其中说“EmployeeAction无法解析为类型”我的问题是是否必须创建EmployeeAction类

actions = new ArrayList<EmployeeAction>();

即使我把“actions = new ArrayList();”在我的代码?如果是这样,该课程应该包含什么?

package samples.employeedirectory;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class EmployeeDetails extends ListActivity {

protected TextView employeeNameText;
protected TextView titleText;
protected ArrayList<EmployeeAction> actions;
protected EmployeeActionAdapter adapter;
protected int employeeId;
protected int managerId;

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

    employeeId = getIntent().getIntExtra("EMPLOYEE_ID", 0);
    SQLiteDatabase db = (new DatabaseHelper(this)).getWritableDatabase();
    Cursor cursor = db.rawQuery("SELECT emp._id, emp.firstName, emp.lastName, emp.title, emp.officePhone, emp.cellPhone, emp.email, emp.managerId, mgr.firstName managerFirstName, mgr.lastName managerLastName FROM employee emp LEFT OUTER JOIN employee mgr ON emp.managerId = mgr._id WHERE emp._id = ?", 
                            new String[]{""+employeeId});

    if (cursor.getCount() == 1)
    {
            cursor.moveToFirst();

            employeeNameText = (TextView) findViewById(R.id.employeeName);
            employeeNameText.setText(cursor.getString(cursor.getColumnIndex("firstName")) + " " + cursor.getString(cursor.getColumnIndex("lastName")));

            titleText = (TextView) findViewById(R.id.title);
            titleText.setText(cursor.getString(cursor.getColumnIndex("title")));

            actions = new ArrayList<EmployeeAction>();

            String officePhone = cursor.getString(cursor.getColumnIndex("officePhone"));
            if (officePhone != null) {
                    actions.add(new EmployeeAction("Call office", officePhone, EmployeeAction.ACTION_CALL));
            }

            String cellPhone = cursor.getString(cursor.getColumnIndex("cellPhone"));
            if (cellPhone != null) {
                    actions.add(new EmployeeAction("Call mobile", cellPhone, EmployeeAction.ACTION_CALL));
                    actions.add(new EmployeeAction("SMS", cellPhone, EmployeeAction.ACTION_SMS));
            }

            String email = cursor.getString(cursor.getColumnIndex("email"));
            if (email != null) {
                    actions.add(new EmployeeAction("Email", email, EmployeeAction.ACTION_EMAIL));
            }

            managerId = cursor.getInt(cursor.getColumnIndex("managerId"));
            if (managerId>0) {
                    actions.add(new EmployeeAction("View manager", cursor.getString(cursor.getColumnIndex("managerFirstName")) + " " + cursor.getString(cursor.getColumnIndex("managerLastName")), EmployeeAction.ACTION_VIEW));
            }

            cursor = db.rawQuery("SELECT count(*) FROM employee WHERE managerId = ?", 
                                    new String[]{""+employeeId});
            cursor.moveToFirst();
            int count = cursor.getInt(0);
            if (count>0) {
                    actions.add(new EmployeeAction("View direct reports", "(" + count + ")", EmployeeAction.ACTION_REPORTS));
            }

            adapter = new EmployeeActionAdapter();
            setListAdapter(adapter);
    }

}

public void onListItemClick(ListView parent, View view, int position, long id) {

        EmployeeAction action = actions.get(position);

        Intent intent;
        switch (action.getType()) {

            case EmployeeAction.ACTION_CALL:  
                    Uri callUri = Uri.parse("tel:" + action.getData());  
                    intent = new Intent(Intent.ACTION_CALL, callUri); 
                startActivity(intent);
                    break;

            case EmployeeAction.ACTION_EMAIL:  
            intent = new Intent(Intent.ACTION_SEND);
            intent.setType("plain/text");
            intent.putExtra(Intent.EXTRA_EMAIL, new String[]{action.getData()});
            startActivity(intent);
            break;

            case EmployeeAction.ACTION_SMS:  
                    Uri smsUri = Uri.parse("sms:" + action.getData());  
                    intent = new Intent(Intent.ACTION_VIEW, smsUri); 
                startActivity(intent);
                    break;

            case EmployeeAction.ACTION_REPORTS:  
                    intent = new Intent(this, DirectReports.class);
                    intent.putExtra("EMPLOYEE_ID", employeeId);
                    startActivity(intent);
                    break;

            case EmployeeAction.ACTION_VIEW:  
                    intent = new Intent(this, EmployeeDetails.class);
                    intent.putExtra("EMPLOYEE_ID", managerId);
                    startActivity(intent);
                    break;
        }
}    

class EmployeeActionAdapter extends ArrayAdapter<EmployeeAction> {

    EmployeeActionAdapter() {
                    super(EmployeeDetails.this, R.layout.action_list_item, actions);
            }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
            EmployeeAction action = actions.get(position);
            LayoutInflater inflater = getLayoutInflater();
            View view = inflater.inflate(R.layout.action_list_item, parent, false);
            TextView label = (TextView) view.findViewById(R.id.label);
            label.setText(action.getLabel());
            TextView data = (TextView) view.findViewById(R.id.data);
            data.setText(action.getData());
            return view;
    }

}

}

5 个答案:

答案 0 :(得分:2)

Java是静态类型的,并且您希望在编译时引用的所有内容都需要存在。所以是的 - 如果需要,你必须创建EmployeeAction。 (并且您需要在课程顶部使用import yourpackage.EmployeeAction;导入它)

如果列表<EmployeeAction>用于强制列表元素的编译时安全性,则为类型定义。这意味着“您只能将EmployeeAction的实例放入此集合中”。这在以后访问集合时很有用 - 编译器可以保证列表仅包含EmployeeAction个实例

答案 1 :(得分:0)

是的,它必须存在(EmployeeAction类)。对于它应包含的内容,我想说可能是一个构造函数,它接受如下参数:(String location, String phone, EmployeeAction.ACTION*),然后是这些值的setter和getter。

答案 2 :(得分:0)

EmplyeeAction是一个不是Java的已知类。然后,它可以导入(如果存在)或创建。

答案 3 :(得分:0)

此列表无关紧要。几行,你的代码说:

actions.add(new EmployeeAction("Call office", officePhone, EmployeeAction.ACTION_CALL));

是的,您需要一个类EmployeeAction来编译该代码。它可能是在您忽略或跳过的教程的一部分中引入的。

答案 4 :(得分:0)

你必须有一个EmployeeAction课程。 因为你说你是java的新手,所以如果经历这个tutorial

会很好