Android - 无法访问封闭的类型实例

时间:2014-03-04 10:51:16

标签: android android-fragments android-arrayadapter listactivity

当我尝试创建Item类的新实例时,我收到有关“无法访问类型的实例”的错误。我不确定这意味着什么。所以我不知道从哪里开始。请帮忙。提前谢谢大家

public static class GreetFrag extends Fragment {

    public static final String ARG_OBJECT = "object";
    private List<RowItem> rowItems;
    private List<Item> newList;

    PinnedSectionListActivity pActivity = new PinnedSectionListActivity();
    ListView lv;
    ListView newLv;
    Item item;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_greetfrag_swipeview, container, false);


        //lv = (ListView) rootView.findViewById(R.id.myList);
        newLv = (ListView) rootView.findViewById(R.id.newList);

        //rowItems = new ArrayList<RowItem>();
        newList = new ArrayList<MenuActivity.GreetFrag.PinnedSectionListActivity.Item>();

        String[] english = {"Hi (to same age or younger)",
                "Yo!", "Hey!", "Good to see ya.","Hello?","Who dis?","What’s up?","How ya been?","Yeah, I’m good!","Good!","So-so.","Sucky.",
                "Whatcha been up to?","Long time no see!","It’s been a while.","You’re still alive?","You need to lose some weight!",
                "Your face has gotten chubbier!","Your mom has gotten chubbier!","Goodbye","Goodbye (general use)","Goodbye (to a person staying)",
                "Goodbye (to a person leaving)","Goodbye (when both parties are parting)","Bye bye","See ya!","Later!","I’m out.","Be careful!",
                "Good morning(formal)", "G'morning!", "Sleep well?", "It's a beautiful evening!", "Good evening!(formal)", "Evenin", "Sweet dreams!", 
                "Dream about me!", "Sorry!(informal)", "FOrgive me!", "Oops!", "My bad!", "No worries", "It's all good", "No problem", "Forget aboutit", 
                "Can you please do me a favor?", "Please, accept my heart!", "Excuse me", "Move our of my way!", "Be careful!", "My name is Michael", 
                "I am from America", "I have yello fever", "I am 18 years ola dn full of testosterone", "I like hairy girls", 
                "Can you setme up on a blind date with one of your hottie frineds?", "Nice to meet you", "What's your name?", 
                "Have we met before?", "Do you have the time?", "How old are you?"};

        String[] roman = {"Annyeong", 
                "Ya!", "Imma!", "Banga banga","Yeoboseyo?","Nuguseyo?","Wannya?","Jal jinaeni?","Eung, jal jinae!","Joa!","Geunyang geurae.","Guryeo.",
                "Mohago sarannya?","Oretmaniyeyo!","Olman!","Saraisseonnya?","Sal jom bbaeyagetda!",
                "Eolguli tongtonghae!", "Neone eomma saljom jjisyeosseo!","Jal jinae~","Annyeong~","Jal isseo~","Tto boja!",
                "Jal ga~","Jal jinae~","Bai bai","Najungebwa!","Na ganda.","Josimhae!", "Annyeonghi jumusyeoseoyo","Joeun achim!", 
                "Jal Jasseo?","Joeun bam!", "Anneonghi jumuseyo", "jalja", "Joeun kkumkkwo!", "Nae kkumkkwo!", "Mian!", 
                "Yongseohaejwo!", "At!", "Silsu!", "Geokjeonghajima", "Da gwaenchana", "Munjae eopsseo", "Ijeobeoryeo", 
                "Budi butak jom deureojullae?", "Jebal je mamaeul badajuseyo!", "Sillyehapnida/Jamsimanyo", "Bikyeo!", 
                "Josim!", "Je ireumeun Michael ipsida", "Jeoneun migukeseo wasseupnida", "Jeoneun dongyanginman joahapnida", 
                "Jeoneun yeolyeodeolssaligo himi neomchipnida", "Jeoneun teol maneun yeojaga jossepnida", 
                "Jal sang-gin chingurang na sogaeting sikyejo?", "Mannaseo ban-gapseupnida", "Ireumi mwoyeyo?", 
                "Uri mannanjeok itnayo?", "Jgeum myeossiyeyo?", "Naiga eotteoke dwae?"};

        String[] hangul = {"안녕",
                "야!", "임마!", "방가 방가","여보세요?","누구세요?","왔냐?","잘 지내니?","응, 잘 지내!","좋아!","그냥 그래.","구려.",
                "뭐하고 살았냐?","오랫만이예요!","올만!","살아있었냐?","살 좀 빼야겠다!",
                "얼굴이 통통해!","너네 엄마 살좀 찌셨어!","잘 지내~","안녕~","잘 있어~",
                "잘 가~","잘 지내~","바이 바이","또 보자!","나중에봐!","나 간다.","조심해!",
                "안녕히 주무셨어요", "좋은 아침!", "잘 잤어?", "좋은 밤!", "안녕히 주무세요", 
                "잘자", "좋은 꿈꿔!", "내 꿈꿔!", "미안!", "용서해줘!", "앗!", "실수!", "걱정하지마", 
                "다 괜찮아","문제없어", "잊어버려", "부디 부탁 좀 들어줄래?", "제발 제 맘을 받아주세요!", 
                "실례합니다/잠시만요", "비켜!", "조심!", "제 이름은 마이클입니다", "저는 미국에서 왔습니다", 
                "저는 동양인만 좋아합니다", "저는 열여덟살이고 힘이 넘칩니다", "저는 털 많은 여자가 좋습니다", 
                "잘 생긴 친구랑 나 소개팅 시켜줘?", "만나서 반갑습니다", "이름이 뭐예요?", "우리 만난적 있나요?", 
                "지금 몇시예요?", "나이가 어떻게 돼?"};


        //Populate the List
        for (int i = 0; i < english.length; i++) {
            item = new Item(english[i], hangul[i], roman[i], 1, "test");
            newList.add(item);
        }

        // Set the adapter on the ListView
        LazyAdapter adapter = new LazyAdapter(getActivity(), R.layout.view_lessons, rowItems);
        //lv.setAdapter(adapter);

        /**
        lv.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
        **/

        return rootView;
    }

    public class PinnedSectionListActivity extends ListActivity implements OnClickListener {

        public class CustomAdapter extends ArrayAdapter<Item> implements PinnedSectionListAdapter {

            Context context;
            List <Item> items;
            private final int[] COLORS = new int[] {
                R.color.green_light, 
                R.color.orange_light,
                R.color.blue_light, 
                R.color.red_light };

            class ViewHolder {
                int sectionPosition;
                int listPosition;

                TextView english;
                TextView romanization;
                TextView hangul;
                RelativeLayout card;

            }

            public CustomAdapter(Context context, int resourceId, List<Item> items) {
                super(context, resourceId, items);
                this.context = context;
            }


            public CustomAdapter(Context context, int resource, int textViewResourceId) {
                super(context, resource, textViewResourceId);

                final int sectionsNumber = 'Z' - 'A' + 1;

                prepareSections(sectionsNumber);

                int sectionPosition = 0, listPosition = 0;

                for (int i=0; i< sectionsNumber; i++) {

                    String title = null;

                    final String []country = {
                            "Korean", "Japanese", "Chinese", "Cambodian", "Loas", "Taiwamese"
                    };


                    final String [] CATEGORY = {
                        "Language",
                        "sports",
                        "love",
                        "luxury",
                        "vacation",
                        "games",
                        "home",
                        "travel",
                        "electronics",
                        "movies",
                    };

                    switch (('A' + i)) {
                    case ('A' + 0):
                        title = country[0];
                        break;
                    case ('A' + 1):
                        title = country[1];
                        break;
                    case ('A' + 2):
                        title = country[2];
                        break;
                    case ('A' + 3):
                        title = country[3];
                        break;
                    case ('A' + 4):
                        title = country[4];
                        break;
                    case ('A' + 5):
                        title = country[5];
                        break;
                    default:
                        break;
                    }

                    //Create a new Item class with section header and Name
                    Item section = new Item(Item.SECTION, title + " " + i);
                    //Item section = new Item(Item.SECTION, String.valueOf((char)('A' + i)));

                    section.sectionPosition = sectionPosition;
                    section.listPosition = listPosition++;
                    onSectionAdded(section, sectionPosition);
                    add(section);

                    final int itemsNumber = CATEGORY.length; 

                    //(int) Math.abs((Math.cos(2f*Math.PI/3f * sectionsNumber / (i+1f)) * 25f));

                    // For loop to iterate the exact number of itemNumber
                    for (int j = 0;j < CATEGORY.length;j++) {
                        //Item item = new Item(Item.ITEM, section.text.toUpperCase(Locale.KOREA) + " - " + j);
                        Item item = new Item(Item.ITEM, CATEGORY[j]);
                        item.sectionPosition = sectionPosition;
                        item.listPosition = listPosition++;
                        add(item);
                    }

                    sectionPosition++;
                }
            }

            protected void prepareSections(int sectionsNumber) { }
            protected void onSectionAdded(Item section, int sectionPosition) { }

            @Override public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder view = null;
                Item item = getItem(position);

                LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                if (convertView == null) {
                    convertView = mInflater.inflate(R.layout.view_lessons, null);
                    view.card = (RelativeLayout) convertView.findViewById(R.id.card);
                    view.romanization = (TextView)convertView.findViewById(R.id.romanization);
                    view.english = (TextView)convertView.findViewById(R.id.english_translation);
                    view.hangul = (TextView)convertView.findViewById(R.id.hangul);

                    convertView.setTag(view);
                } else {
                    view = (ViewHolder)convertView.getTag();
                    view.romanization.setText(item.getRomanization());
                    view.english.setText(item.getEnglish());
                    view.hangul.setText(item.getHangul());

                    Animation animation = AnimationUtils.loadAnimation(context, R.anim.card_animation);
                    view.card.startAnimation(animation);
                    if (item.type == Item.SECTION) {
                        //view.setOnClickListener(PinnedSectionListActivity.this);
                        view.english.setBackgroundColor(parent.getResources().getColor(COLORS[item.sectionPosition % COLORS.length]));
                    }
                }

                return convertView;
            }

            @Override public int getViewTypeCount() {
                return 2;
            }

            @Override public int getItemViewType(int position) {
                return getItem(position).type;
            }

            @Override
            public boolean isItemViewTypePinned(int viewType) {
                return viewType == Item.SECTION;
            }

        }

        class Item {
            private String english;
            private String hangul;
            private String romanization;

            public static final int ITEM = 0;
            public static final int SECTION = 1;

            public final int type;
            public final String text;

            public int sectionPosition;
            public int listPosition;

            public Item(String english, String hangul, String romanization, int type, String text) {
                super();
                this.type = type;
                this.text = text;
                this.english = english;
                this.hangul = hangul;
                this.romanization = romanization;
            }

            public String getEnglish() {
                return english;
            }

            public void setEnglish(String english) {
                this.english = english;
            }

            public String getHangul() {
                return hangul;
            }

            public void setHangul(String hangul) {
                this.hangul = hangul;
            }

            public String getRomanization() {
                return romanization;
            }

            public void setRomanization(String romanization) {
                this.romanization = romanization;
            }




            public Item(int type, String text) {
                this.type = type;
                this.text = text;
            }

            @Override public String toString() {
                return text;
            }

        }



        public class FastScrollAdapter extends CustomAdapter implements SectionIndexer {

            private Item[] sections;

            public FastScrollAdapter(Context context, int resource, int textViewResourceId) {
                super(context, resource, textViewResourceId);
            }

            @Override protected void prepareSections(int sectionsNumber) {
                sections = new Item[sectionsNumber];
            }

            @Override protected void onSectionAdded(Item section, int sectionPosition) {
                sections[sectionPosition] = section;
            }

            @Override public Item[] getSections() {
                return sections;
            }

            @Override public int getPositionForSection(int section) {
                if (section >= sections.length) {
                    section = sections.length - 1;
                }
                return sections[section].listPosition;
            }

            @Override public int getSectionForPosition(int position) {
                if (position >= getCount()) {
                    position = getCount() - 1;
                }
                return getItem(position).sectionPosition;
            }

        }




        private boolean hasHeaderAndFooter;
        private boolean isFastScroll;
        private boolean addPadding;
        private boolean isShadowVisible = true;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            if (savedInstanceState != null) {
                isFastScroll = savedInstanceState.getBoolean("isFastScroll");
                addPadding = savedInstanceState.getBoolean("addPadding");
                isShadowVisible = savedInstanceState.getBoolean("isShadowVisible");
                hasHeaderAndFooter = savedInstanceState.getBoolean("hasHeaderAndFooter");
            }
            initializeHeaderAndFooter();
            initializeAdapter();
            initializePadding();
        }

        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putBoolean("isFastScroll", isFastScroll);
            outState.putBoolean("addPadding", addPadding);
            outState.putBoolean("isShadowVisible", isShadowVisible);
            outState.putBoolean("hasHeaderAndFooter", hasHeaderAndFooter);
        }

        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {

        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            menu.getItem(0).setChecked(isFastScroll);
            menu.getItem(1).setChecked(addPadding);
            menu.getItem(2).setChecked(isShadowVisible);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_fastscroll:
                    isFastScroll = !isFastScroll;
                    item.setChecked(isFastScroll);
                    initializeAdapter();
                    break;
                case R.id.action_addpadding:
                    addPadding = !addPadding;
                    item.setChecked(addPadding);
                    initializePadding();
                    break;
                case R.id.action_showShadow:
                    isShadowVisible = !isShadowVisible;
                    item.setChecked(isShadowVisible);
                    ((PinnedSectionListView)getListView()).setShadowVisible(isShadowVisible);
                    break;
                case R.id.action_showHeaderAndFooter:
                    hasHeaderAndFooter = !hasHeaderAndFooter;
                    item.setChecked(hasHeaderAndFooter);
                    initializeHeaderAndFooter();
                    break;
            }
            return true;
        }

        private void initializePadding() {
            float density = getResources().getDisplayMetrics().density;
            int padding = addPadding ? (int) (16 * density) : 0;
            getListView().setPadding(padding, padding, padding, padding);
        }

        private void initializeHeaderAndFooter() {
            setListAdapter(null);
            if (hasHeaderAndFooter) {
                ListView list = getListView();

                LayoutInflater inflater = LayoutInflater.from(this);
                TextView header1 = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, list, false);
                header1.setText("First header");
                list.addHeaderView(header1);

                TextView header2 = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, list, false);
                header2.setText("Second header");
                list.addHeaderView(header2);

                TextView footer = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, list, false);
                footer.setText("Single footer");
                list.addFooterView(footer);
            }
            initializeAdapter();
        }

        @SuppressLint("NewApi")
        private void initializeAdapter() {
            getListView().setFastScrollEnabled(isFastScroll);
            if (isFastScroll) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                    getListView().setFastScrollAlwaysVisible(true);
                }
                setListAdapter(new FastScrollAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1));
            } else {
                setListAdapter(new CustomAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1));
            }
        }

        @Override
        public void onClick(View v) {
            Toast.makeText(this, "Item: " + v.getTag() , Toast.LENGTH_SHORT).show();
        }

    }
}

Here is the whole fragment.

2 个答案:

答案 0 :(得分:3)

如果两个类Item和CustomAdapter都驻留在同一个java文件中,那么您需要从Item类中删除public关键字。

Java只允许.java文件上的一个公共类,因为Java设计者选择了一种严格的方法来强化他们对良好设计实践的想法,这是该主题的一部分。

有关详细信息,请查看以下链接:

http://www.artima.com/weblogs/viewpost.jsp?thread=7555

答案 1 :(得分:1)

看起来像你的:

 public class Item

在CustomAdapter类之外,在CustomAdapter类中移动,或者使Item不是公共类。

此外,如果您在CustomAdapter中移动它,请考虑将其设置为静态类。从你的代码中你没有在Item中使用封闭类(此处为CustomAdapter),因此不需要使Item非静态。