java.lang.NullPointerException: Versuch, die virtuelle Methode 'int android.view.View.getImportantForAccessibility ()' für eine Nullobjektreferenz aufzurufen

154

Ich versuche, eine Einkaufslisten-App basierend auf Eingabefeldern ArrayListund zusammenzustellen ListView. Die App basiert auf Fragments. Ich bin jedoch auf ein Problem gestoßen und weiß nicht, wie ich es lösen soll.

Ich habe mich sowohl bei Google als auch bei StackOverflow umgesehen und einige Informationen gefunden. Ich habe es jedoch nicht zum Laufen gebracht. Jetzt hoffe ich, dass ich Hilfe mit meinem Code bekommen kann.

Ich bin relativ unerfahren in der Android-Entwicklung.

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

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>

Log

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)
user2734182
quelle
1
Sie wissen , die return items.indexOf(getItem(position));gleich a ist positionin Ihrem Fall? Das erste, was Sie ausprobieren müssen, ist, den Konstruktor aus zu entfernen List.
Blackbelt

Antworten:

397

public View getViewWechseln Sie return null;in Ihrer Methode zu return convertView;.

Pavya
quelle
@ user2734182 Kannst du deine Antwort erweitern und erklären, warum convertViewdas jemals so sein nullsollte? Hat es eine besondere Bedeutung?
dark_ruby
6
@dark_ruby: getView () eines Adapters, der zur Rückgabe von a erforderlich ist View. Wenn Sie zurückkehren null, erhalten Sie genau dieselbe Fehlermeldung.
Ariefbayu
14

#verwenden return convertView;

Code:

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 listener for remove button  คลิกลบปุ่ม
        rm_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                modelList.remove(position);
                notifyDataSetChanged();
            }
        });
    }

    ///#use    return convertView;
    return convertView;
}
Pong Petrung
quelle
2

in Ihrer baseadapter Klasse Konstruktor versuchen zu initialisieren LayoutInflater , normalerweise bevorzugt i auf diese Weise,

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

Ich hoffe, dies wird Ihnen helfen, wenn Sie oben in der Klasse die Variable LayoutInflater erstellen

Ashana.Jackol
quelle
1

Es tritt manchmal auf, wenn wir in einer Fragmentaktivität einen benutzerdefinierten Adapter verwenden. und wir geben ein Nullobjekt zurück, dh eine Nullansicht, damit die Aktivität verwirrt wird, welche Ansicht geladen werden soll, weshalb diese Ausnahme auftritt

Zeigt die Position an, an der die Ansicht geändert werden soll

Aakib Jabbar
quelle