2015-02-19 18 views
111

Giriş alanları temelinde bir alışveriş listesi uygulaması oluşturmaya çalışıyorum ArrayList, ve ListView. Uygulama Fragments dayanacaktır. Ancak, bir sorunla karşılaştım ve nasıl çözeceğimi bilmiyorum.java.lang.NullPointerException: Bir sanal nesne referansı üzerinde sanal yöntem 'int android.view.View.getImportantForAccessibility()' çağrılmaya çalışın

Hem Google'a hem de StackOverflow'a baktım bazı bilgiler buldum. Ancak, işe yaramadı. Şimdi umarım kodumla ilgili yardım alabilirim.

Android geliştirmede göreceli olarak deneyimsizim. peşin

Main.java

import java.util.ArrayList; 

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.view.MenuItem; 

public class Main extends FragmentActivity { 

    ArrayList<Detail> items = new ArrayList<Detail>(); 
    FragmentManager FM; 
    FragmentTransaction FT; 
    Input input = new Input(); 

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

     replaceFragment(R.id.container, input); 
    } 


    public void replaceFragment(int container, Fragment fragment){ 
     FM = getFragmentManager(); 
     FT = FM.beginTransaction(); 

     FT.replace(container, fragment); 
     FT.commit(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

ListAdapter.java

public class ListAdapter extends BaseAdapter { 

    Context context; 
    ArrayList<Detail> items; 

    public ListAdapter(Context context, ArrayList<Detail> items) { 
     this.context = context; 
     this.items = items; 
    } 

    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return items.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return items.indexOf(getItem(position)); 
    } 

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

     if(convertView == null){ 
      LayoutInflater lInflater = (LayoutInflater)context.getSystemService(
        Activity.LAYOUT_INFLATER_SERVICE); 

      convertView = lInflater.inflate(R.layout.list_row, null);  
     } 

     TextView title = (TextView)convertView.findViewById(R.id.itemTitle); 
     CheckBox done = (CheckBox)convertView.findViewById(R.id.itemDone); 


     Detail detail_position = items.get(position); 

     title.setText(detail_position.getTitle()); 
     done.setChecked(detail_position.isDone()); 

     return null; 
    } 
} 

List.java

yılında

Teşekkür 0

import java.util.ArrayList; 

import android.app.ListFragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 

public class List extends ListFragment implements OnItemClickListener{ 

    ArrayList<Detail> items; 
    ListAdapter adapter; 
    private onClickListener OCL; 

    interface onClickListener{ 
     public void onItemClick(int id); 
    } 

    public List(ArrayList<Detail> items) { 
     this.items = items; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View root = inflater.inflate(R.layout.list_layout, container, false); 
     return root; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     if(items != null){ 
      adapter = new ListAdapter(getActivity(), items); 
      setListAdapter(adapter); 
      getListView().setOnItemClickListener(this); 
     } 

    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 

     if(OCL != null){ 
      OCL.onItemClick(position); 
     }  
    } 
} 

list_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <ListView 
     android:id="@+id/android:list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </ListView> 
</LinearLayout> 

list_row

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:padding="10dp" > 
    <TextView 
     android:id="@+id/itemTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.96" 
     android:text="Medium Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 
    <CheckBox 
     android:id="@+id/itemDone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Done" /> 
</LinearLayout> 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.com.hermods.lab2_2.Main" > 
</RelativeLayout> 

Günlüğü sizin public View getView yöntem değişikliğine return null;return convertView; için ise

02-19 09:10:47.421: E/AndroidRuntime(12745): Process: com.example.com.hermods.lab2_2, PID: 12745 
02-19 09:10:47.421: E/AndroidRuntime(12745): java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.AbsListView.obtainView(AbsListView.java:2360) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.ListView.makeAndAddView(ListView.java:1864) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.ListView.fillDown(ListView.java:698) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.ListView.fillFromTop(ListView.java:759) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.ListView.layoutChildren(ListView.java:1673) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.AbsListView.onLayout(AbsListView.java:2148) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2072) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1829) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.Choreographer.doFrame(Choreographer.java:550) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.os.Handler.handleCallback(Handler.java:739) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.os.Handler.dispatchMessage(Handler.java:95) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.os.Looper.loop(Looper.java:135) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.app.ActivityThread.main(ActivityThread.java:5221) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at java.lang.reflect.Method.invoke(Native Method) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at java.lang.reflect.Method.invoke(Method.java:372) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
02-19 09:10:47.421: E/AndroidRuntime(12745): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
+1

'return items.indexOf (getItem (position));' durumda sizin durumunuzda bir 'position' olduğunu biliyor musunuz? Denenecek ilk şey yapıcıyı 'List' den kaldırmaktır. – Blackbelt

cevap

326

.

sizin baseadapter sınıf yapıcısı LayoutInflater başlatmak için denemeydi normalde ben tercih bu şekilde içinde
public View getView(final int position, View convertView, ViewGroup parent) { 


      convertView = null; 

      if (convertView == null) { 

       LayoutInflater mInflater = (LayoutInflater) context 
         .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
       convertView = mInflater.inflate(R.layout.list_item, null); 



       TextView tv = (TextView) convertView.findViewById(R.id.name); 
       Button rm_btn = (Button) convertView.findViewById(R.id.rm_btn); 

       Model m = modelList.get(position); 
       tv.setText(m.getName()); 

       // click listiner for remove button คลิกลบปุ่ม 

       rm_btn.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         modelList.remove(position); 
         notifyDataSetChanged(); 
        } 
       }); 

      } 

      ///#use return convertView; 
      return convertView; 
     } 
+0

@ user2734182 cevabınızı uzatabilir ve 'convertView' niçin' null' olacağını açıklayabilir, özel anlamı var mı? –

+4

@dark_ruby: 'View' döndürmek için gereken bir Bağdaştırıcının getView().'Null' değerini döndürürseniz, aynı hata mesajını alırsınız. – ariefbayu

+0

benim için çalıştı, teşekkürler @Pavya –

11

return convertView;

Kod #use üst sınıfın LayoutInflater değişkenini oluşturmasını sağlayın, umarım bu size yardımcı olacaktır

1

,

public ClassBaseAdapter(Context context,ArrayList<Integer> listLoanAmount) { 
    this.context = context; 
    this.listLoanAmount = listLoanAmount; 
    this.layoutInflater = LayoutInflater.from(context); 
} 

at:

İlgili konular