0

I have a listactivity app , consist of 5 rows , each row contain one TEXT and 5 BUTTON , both text and buttons are clickable , text will open MyDay activity whic is textview and when you click any button it must open videoview screen .

every things run nicely except when turn mobile to landscape mode and scrolling the list it force closed and gave NullPointerException in logcat report in this line (51) of MyArrayAdapter Class .

logcat:

  java.lang.NullPointerException
         at com.test.demo.MyArrayAdapter.getView(MyArrayAdapter.java:51)

Line (51) in MyArrayAdapter Class is :

   holder.textView.setText(s);

any advice will be appreciated to solve that , thanks .

MyArrayAdapter Class:

 public class MyArrayAdapter extends ArrayAdapter<String> {

private final String[] mClasses;
private Context mContext;
private Typeface tf;
private LayoutInflater mInflater;
private String[] mData = { "button1", "button2", "button3", "button4",
        "button5" };
private int[] ids = { R.id.button1, R.id.button2, R.id.button3,
        R.id.button4, R.id.button5 };

int[][] rowDrawables = { 
        {R.drawable.row_1, R.drawable.row_2, R.drawable.row_3, 
               R.drawable.row_4, R.drawable.row_5},
        {R.drawable.row_6, R.drawable.row_7, R.drawable.row_8, 
               R.drawable.row_9, R.drawable.row_10},
        {R.drawable.row_11, R.drawable.row_12, R.drawable.row_13, 
               R.drawable.row_14, R.drawable.row_15},
        {R.drawable.row_16, R.drawable.row_17, R.drawable.row_18, 
               R.drawable.row_19, R.drawable.row_20},
        {R.drawable.row_21, R.drawable.row_22, R.drawable.row_23, 
               R.drawable.row_24, R.drawable.row_25}};

public MyArrayAdapter(Context context, String[] classes) {
    super(context, 0, classes);
    mClasses = classes;
    mContext = context;
    tf = Typeface.createFromAsset(context.getAssets(), "BFantezy.ttf");
    mInflater = LayoutInflater.from(context);
                     }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.row, null, true);
        holder = new ViewHolder();
        holder.textView = (TextView) convertView
                .findViewById(R.id.row_label);
        holder.textView.setTypeface(tf);
        holder.bt1 = (Button) convertView.findViewById(R.id.button1);
        holder.bt2 = (Button) convertView.findViewById(R.id.button2);
        holder.bt3 = (Button) convertView.findViewById(R.id.button3);
        holder.bt4 = (Button) convertView.findViewById(R.id.button4);
        holder.bt5 = (Button) convertView.findViewById(R.id.button5);
    } else {
        holder = (ViewHolder) convertView.getTag();}

    String s = mClasses[position];
    holder.textView.setText(s);

    int[] rowDr = rowDrawables[position];
    holder.bt1.setBackgroundResource(rowDr[0]);
    holder.bt2.setBackgroundResource(rowDr[1]);
    holder.bt3.setBackgroundResource(rowDr[2]);
    holder.bt4.setBackgroundResource(rowDr[3]);
    holder.bt5.setBackgroundResource(rowDr[4]);

    holder.textView.setTag(Integer.valueOf(position));
    holder.textView.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Integer pos = (Integer) v.getTag();
            Intent ourIntent = new Intent(mContext, MyDay.class);
            ourIntent.putExtra("cheese", mClasses[pos]);
            mContext.startActivity(ourIntent);
        }
    });
    holder.bt1.setTag(Integer.valueOf(position));
    holder.bt1.setOnClickListener(mListener);
    holder.bt2.setTag(Integer.valueOf(position));
    holder.bt2.setOnClickListener(mListener);
    holder.bt3.setTag(Integer.valueOf(position));
    holder.bt3.setOnClickListener(mListener);
    holder.bt4.setTag(Integer.valueOf(position));
    holder.bt4.setOnClickListener(mListener);
    holder.bt5.setTag(Integer.valueOf(position));
    holder.bt5.setOnClickListener(mListener);
    return convertView;
                                 }

static class ViewHolder {
    TextView textView;
    Button bt1, bt2, bt3, bt4, bt5;

                        }

private OnClickListener mListener = new OnClickListener() {

    public void onClick(View v) {
                    Integer realPos = (Integer) v.getTag();
                    int video = 0;
        String night = null;
        for (int i = 0; i < ids.length; i++) {
            if (v.getId() == ids[i]) {
                video = i;
                break;
            }
        }
        Intent i = new Intent(mContext, My_videos.class);
        i.putExtra("video", video);
                    i.putExtra("row", realPos);
        mContext.startActivity(i);
                   }
             };

               }

ListButtons:

 public class ListButtons extends ListActivity {
String classes[] = {"First",  "Second", "Third","Fourth", "Fifth" }; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setListAdapter(new MyArrayAdapter(this, classes));  }}
Android Stack
  • 4,314
  • 6
  • 31
  • 49
  • Have you used any layout like `layout-land` in your project? – Praveenkumar Aug 31 '12 at 07:57
  • Okay. Then, just try to use `android:configChanges="..."` for you listActivity in manifest file. – Praveenkumar Aug 31 '12 at 08:56
  • SpK but i want to use the app in both mode : portrait and landscape mode – Android Stack Aug 31 '12 at 09:03
  • Place a break point inside `com.test.demo.MyArrayAdapter.getView()` and check whether its debugging or not. – Praveenkumar Aug 31 '12 at 09:06
  • @SpK what i mean , what do you men by ( place abreak point inside com.test.demoMyArrayAdapter.getview() – Android Stack Aug 31 '12 at 11:21
  • Add this line `convertView.setTag(holder);` at the end of the `if (convertView == null)` clause(after you search for the buttons) in the `getView` method and see if the exceptions still appears. – user Aug 31 '12 at 11:46
  • @Luksprog it ok thanks alot , but can you please explaine how this line (convertView.setTag(holder);) remove the exception , im just learn java since few month only please – Android Stack Aug 31 '12 at 21:28
  • You used the holder pattern but when the `convertView` was null you didn't assigned the holder object that was created to the `convertView` to later be retrieved. When the `convertView` was null the holder object you retrieved was null and when you tried to use it it you had the `NullPointerException`. – user Sep 01 '12 at 04:58
  • @Luksprog thnaks alot my dear sir – Android Stack Sep 01 '12 at 06:45

0 Answers0