2012-12-27 3 views
0

У меня возникли проблемы с использованием пользовательского адаптера в Android Fragment. Вот код. Но прежде чем я использовал этот код в действии, и все было хорошо. Я не могу найти, где я ошибаюсь во время использования фрагментов.Пользовательский адаптер андроидного фрагмента

package com.testapp.test.fragments; 

import org.holoeverywhere.LayoutInflater; 
import org.holoeverywhere.app.Fragment; 
import com.testapp.test.R; 

import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 

public class LawDocFragment extends Fragment{ 

private static LawDocFragment instance; 

public static LawDocFragment getInstance() { 
    if (LawDocFragment.instance == null) { 
     return new LawDocFragment(); 
    } 
    return LawDocFragment.instance; 
} 

public LawDocFragment() { 
    LawDocFragment.instance = this; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
} 

String[] zakonmenubig; 
String[] zakonmenusmall; 
Integer[] zakonmenuicon = { R.drawable.ic_menu_zakonu_pravila, 
          R.drawable.ic_menu_zakonu_strafu, 
          R.drawable.ic_menu_zakonu_doc, 
          R.drawable.ic_menu_zakonu_u77, 
          R.drawable.ic_menu_zakonu_u33, 
          R.drawable.ic_menu_zakonu_u400, 
          R.drawable.ic_menu_zakonu_p1103}; 

myAdapter zakonAdapter; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View LawDoc = inflater.inflate(R.layout.zakonbaza);  
    ListView zakonmenulist = (ListView)LawDoc.findViewById(R.id.zakonmenulist);  
    zakonAdapter = new myAdapter();  
    zakonmenulist.setAdapter(zakonAdapter); 

    zakonmenubig = getResources().getStringArray(R.array.zakonmenubig); 
    zakonmenusmall = getResources().getStringArray(R.array.zakonmenusmall); 

    return LawDoc; 
} 

//start myAdapter 
public class myAdapter extends BaseAdapter { 
    private LayoutInflater mLayoutInflater; 

    public myAdapter(Context ctx) { 
     mLayoutInflater = LayoutInflater.from(ctx); 
    } 

    public int getCount() { 
     return zakonmenubig.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

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

    public String getString(int position) { 
     return zakonmenubig[position] + " (" + zakonmenusmall[position] + ")"; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     if (convertView == null) 
      convertView = mLayoutInflater.inflate(R.layout.list_zakonbaza, null); 

     ImageView image = (ImageView) convertView.findViewById(R.id.icon); 
     image.setImageResource(zakonmenuicon[position]); 

     TextView sign = (TextView) convertView.findViewById(R.id.zakonmenuitem); 
     sign.setText(zakonmenubig[position]); 

     TextView date = (TextView) convertView.findViewById(R.id.zakonmenuitemsmall); 
     date.setText(zakonmenusmall[position]); 
     return convertView; 
    } 
} // end myAdapter 

} 

Теперь Затмение показать мне ошибку "Конструктор LawDocFragment.myAdapter() не определено" в строке

zakonAdapter = new myAdapter(); 

если изменится

zakonAdapter = new myAdapter(getActivity()); 

Я получаю это исключение

12-27 00:39:25.297: E/AndroidRuntime(652): FATAL EXCEPTION: main 
12-27 00:39:25.297: E/AndroidRuntime(652): java.lang.NullPointerException 
12-27 00:39:25.297: E/AndroidRuntime(652): at com.testapp.test.fragments.fragments.LawDocFragment$myAdapter.getCount(LawDocFragment.java:72) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.widget.ListView.setAdapter(ListView.java:436) 
12-27 00:39:25.297: E/AndroidRuntime(652): at com.testapp.test.fragments.fragments.LawDocFragment.onCreateView(LawDocFragment.java:55) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.support.v4.app._HoloFragment.onCreateView(_HoloFragment.java:177) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.os.Handler.handleCallback(Handler.java:587) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.os.Looper.loop(Looper.java:123) 
12-27 00:39:25.297: E/AndroidRuntime(652): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-27 00:39:25.297: E/AndroidRuntime(652): at java.lang.reflect.Method.invokeNative(Native Method) 
12-27 00:39:25.297: E/AndroidRuntime(652): at java.lang.reflect.Method.invoke(Method.java:521) 
12-27 00:39:25.297: E/AndroidRuntime(652): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-27 00:39:25.297: E/AndroidRuntime(652): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-27 00:39:25.297: E/AndroidRuntime(652): at dalvik.system.NativeStart.main(Native Method)  

в строке «LawDocFragment.java:72» У меня есть этот код

return zakonmenubig.length; 

и в строке «LawDocFragment.java:55» У меня есть

zakonmenulist.setAdapter(zakonAdapter); 

Я думаю, что что-то неправильно с классом myAdapter, но что. .. и почему в простой деятельности все Ок ..

Я нашел issue и попробовать работать с кодом, но до сих пор ничего не

ответ

1

Ok вопрос здесь

  1. Правильный пустой конструктор показывает ошибку, поскольку в классе адаптера нет такого конструктора. Поэтому либо создайте конструктор без аргументов (плохая идея), либо просто перейдите в контекст.

  2. Ваш пустой указатель происходит потому, что

    zakonmenubig

еще не определен, когда вы создаете адаптер, вместо того, чтобы создать эти элементы до вашего адаптера, как это:

zakonmenubig = getResources().getStringArray(R.array.zakonmenubig); 
zakonmenusmall = getResources().getStringArray(R.array.zakonmenusmall); 

ListView zakonmenulist = (ListView)LawDoc.findViewById(R.id.zakonmenulist);  
zakonAdapter = new myAdapter();  
zakonmenulist.setAdapter(zakonAdapter); 

Как теперь ваш законконюбиг будет инициализирован.

+0

** mikeswright49 ** спасибо, сейчас все работает :) – Iar0slav

Смежные вопросы