我是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;
    }

}


}

最佳答案

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

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

关于java - ArrayList问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7029283/

10-12 03:50