Devs
Devs

Reputation: 286

Listview Inside swipeable tabs fragment using customadapter

I am trying to set listview within swipeable tabs fragment but somehow the data is not getting stored in the customlistitem(setter and getter class). It always shows the null value. Please help

Here is the tab1 fragment code

package com.example.ic071034.materialstabs;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import java.util.ArrayList;


public class Tab1 extends Fragment {

private ListView mListView;
public ListviewContactAdapter adapter;
public ArrayList<ListviewContactItem> listContact;

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

    mListView = (ListView) rootView.findViewById(android.R.id.list);

    return rootView;
}
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    listContact = GetlistContact();
    adapter=new ListviewContactAdapter(getActivity(), listContact);
    mListView.setAdapter(adapter);

}
private ArrayList<ListviewContactItem> GetlistContact(){
    ArrayList<ListviewContactItem> contactlist = new ArrayList<>();

    ListviewContactItem contact = new ListviewContactItem();

    contact.setPickUpPoint("xyz");
    contact.setArea("xyz City");
    contact.setLandmark("near xyz");
    contact.setStreetName("xyz Road");
    contactlist.add(contact);


    contact = new ListviewContactItem();
    contact.setPickUpPoint("xyz");
    contact.setArea("xyz City");
    contact.setLandmark("near xyz");
    contact.setStreetName("xyz Road");
    contactlist.add(contact);

    contact = new ListviewContactItem();
    contact.setPickUpPoint("xyz");
    contact.setArea("xyz City");
    contact.setLandmark("near xyz");
    contact.setStreetName("xyz Road");
    contactlist.add(contact);

    return contactlist;
}
}

and here is the customadapter code

package com.example.ic071034.materialstabs;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;


public class ListviewContactAdapter extends BaseAdapter {
private static ArrayList<ListviewContactItem> listContact=null;

private LayoutInflater mInflater;
private Context context;

public ListviewContactAdapter(Context photosFragment, ArrayList<ListviewContactItem> results){
    listContact = results;
 //   mInflater = LayoutInflater.from(photosFragment);
    this.context=photosFragment;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return listContact.size();
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return listContact.get(arg0);
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}


public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;
    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if(convertView == null){
        convertView = mInflater.inflate(R.layout.pickup_point_list_layout, null);
        holder = new ViewHolder();
        holder.txtpickuppoint = (TextView) convertView.findViewById(R.id.rd_header_text);
        holder.txtarea = (TextView) convertView.findViewById(R.id.area);
        holder.txtlandmark = (TextView) convertView.findViewById(R.id.landmark);
        holder.txtstreetname = (TextView) convertView.findViewById(R.id.streetname);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtpickuppoint.setText(listContact.get(position).getPickUpPoint());
    holder.txtarea.setText(listContact.get(position).getArea());
    holder.txtlandmark.setText(listContact.get(position).getLandmark());
    holder.txtstreetname.setText(listContact.get(position).getStreetName());

    return convertView;
}

static class ViewHolder{
    TextView txtpickuppoint, txtarea,txtlandmark,txtstreetname;
}
}

and here is the customitem class

public class ListviewContactItem {

private String PickUpPoint="";
private String Area = "";
private String Landmark="";
private String StreetName="";


//Area
public String getArea() {
    return Area;
}

public void setArea(String Area) {
    this.Area = Area;
}

//landmark
public String getLandmark() {
    return Landmark;
}

public void setLandmark(String Landmark) {
    this.Landmark = Landmark;
}

//PickUpPoint
public void setPickUpPoint(String PickUpPoint) {
    this.PickUpPoint = PickUpPoint;
}

public String getPickUpPoint() {
    return PickUpPoint;
}


//streetname
public void setStreetName(String StreetName) {
    this.StreetName = StreetName;
}

public String getStreetName() {
    return StreetName;
}

}

here is the logcat

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
        at com.example.ic071034.materialstabs.Tab1.onCreateView(Tab1.java:28)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1016)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1197)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1562)
        at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:535)
        at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1106)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
        at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474)
        at android.view.View.measure(View.java:17448)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5465)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17448)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5465)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
        at android.view.View.measure(View.java:17448)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5465)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17448)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5465)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at android.view.View.measure(View.java:17448)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5465)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17448)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5465)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
        at android.view.View.measure(View.java:17448)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2031)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1189)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1402)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1077)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5884)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5312)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

and there goes the layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<include
    android:id="@+id/tool_bar"
    layout="@layout/tool_bar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    />

<com.example.ic071034.materialstabs.SlidingTabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:elevation="2dp"
    android:background="@color/ColorPrimary"/>

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_weight="1">
</android.support.v4.view.ViewPager>


</LinearLayout>

tab layout

<?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">

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

Upvotes: 0

Views: 1040

Answers (1)

Ankit Kumar
Ankit Kumar

Reputation: 3721

listContact = GetlistContact();
adapter=new ListviewContactAdapter(getActivity(), listContact);
mListView.setAdapter(adapter);

Move these lines on onCreateView

Upvotes: 3

Related Questions