Listview crashes in portrait mode when clicked on items (using fragments)

Sri*_*Sri 5 java android listview android-fragments

I am using fragment layout in my app, this app contains a listview. Clicking on items will do some job. works fine when in landscape mode but getting crashed if items are clicked when in portait mode. What can be the problem?

Here is my code:

MainAcitivity.java

package com.example.newfragment;

import android.content.res.Configuration;

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.widget.Toast;


public class MainActivity extends FragmentActivity {

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

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        /*/ Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            setContentView(R.layout.activity_main);
            Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            setContentView(R.layout.activity_main);
            Toast.makeText(this, "portait", Toast.LENGTH_SHORT).show();
        }*/


    }



}
Run Code Online (Sandbox Code Playgroud)

MenuFragment.java // showing the list view

    package com.example.newfragment;
    import java.io.File;
    import java.util.ArrayList;

    import android.support.v4.app.ListFragment;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;

    public class MenuFragment extends ListFragment {

    int i; 

    private String[] FilePathStrings;
    private String[] FileNameStrings;
     File[] listFile;//for photo
    String[] name = new String[] 
            { "Sri","Sud","Urmila","Amrita","Indra","Ayan",
            "Leo","Neymar","Robin","Ian","Suarez","Mesut","Bastin",
            "Rooney","Ranti","Dong Hyun","Barisich","Andrew" };

    String[] address = new String[]
            {"Dumdum","Dumdum","Dumdum","Dumdum","Lake Town",
            "Salkia","Argentina","Brazil","Netherlands"};

    String [] mobile = new String[]{"456456456","56564565","787687866",
                "645645645","5654576457","76897978978","768768567"};



    String [] photo = new String[]{};



    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
        View view =inflater.inflate(R.layout.list_fragment, container, false);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, name);
        setListAdapter(adapter);

        return view;





    }



    /////////////////////sending data to TextFragment//////////////////
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {


        ///////////accessing files from sd card///////
         File file = new  File(Environment.getExternalStorageDirectory() +"/Frag_list/");
         if (file.isDirectory()) {
            listFile = file.listFiles();

            // Create a String array for FilePathStrings
            FilePathStrings = new String[listFile.length];


            for (i = 0; i < listFile.length; i++) {
                // Get the path of the image file
                FilePathStrings[i] = listFile[i].getAbsolutePath();

            }
        }

       //////////////////////////////


        TextFragment txt = (TextFragment)getFragmentManager().findFragmentById(R.id.fragment2);
        txt.change(position,address[position],mobile[position]);
        getListView().setSelector(android.R.color.holo_blue_dark);


    }
}
Run Code Online (Sandbox Code Playgroud)

TextFragment.java // for the actions upon clicking the items

  package com.example.newfragment;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.InputStream;

import android.R.string;
import android.support.v4.app.Fragment;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


public class TextFragment extends Fragment implements OnClickListener {
    TextView text,add;
    private ImageView img;
    Button b;
    int value;
    String mobile;
    File photo;
    private static final int CAMERA_REQUEST = 1888; 
    Camera camera;


    ////////////data received here////////////
    public void change(int txt, String txt1, String txt2 ){


        add.setText(txt1 );
        value = txt;
        mobile = txt2;

        //photo = f;
        //File image = new  File(Environment.getExternalStorageDirectory() +"/Frag_list/"+value+".jpg"); 

        /*if(photo.exists())
        {
            img.setImageBitmap(BitmapFactory.decodeFile(photo.getAbsolutePath()));
        }
        else
            img.setImageResource(R.drawable.ic_launcher);*/

    }

    @Override

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

        View view = inflater.inflate(R.layout.text_fragment, container, false);
        //text= (TextView) view.findViewById(R.id.AndroidOs);
        add= (TextView)view.findViewById(R.id.address);
        img= (ImageView)view.findViewById(R.id.img);

        //////////////////
        /*File image = new  File(Environment.getExternalStorageDirectory() +"/Frag_list/"+value+".jpg"); 
        if(image.exists())
            {

                     img.setImageBitmap(BitmapFactory.decodeFile(image.getAbsolutePath()));/////////////setting image in imageview
            }*/


        //////////////////////
        b= (Button)view.findViewById(R.id.b);

        img.setOnClickListener(this);
        b.setOnClickListener(this);



        return view;

    }



    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v.equals(img))
        {
            //Toast.makeText(getContext(), "Camera", Toast.LENGTH_LONG).show();


            /*///////////camera hardware///////////
            Parameters parameters = camera.getParameters();//////////////PROBLEM: APP GETTING CRASHED WHEN USED
            parameters.setPictureSize(80, 80);
            camera.setParameters(parameters);
            camera = Camera.open();
            ///////////////////////////////////////*/



            /*Clicking and saving image to sd card*/
            //////////////////////////////////////
            File file = new File(Environment.getExternalStorageDirectory(), "Frag_list");
            file.mkdirs();

            String path = Environment.getExternalStorageDirectory() +"/Frag_list/"+value+".jpg";
            File file2= new File(path);
            Uri outputFileUri = Uri.fromFile( file2 );
            Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
            //intent.putExtra("android.media.action.IMAGE_CAPTURE", outputFileUri ); ///////for displaying image
            intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri ); //////////for saving image

            /*Bundle b = new Bundle();
            b.putString("android.media.action.IMAGE_CAPTURE", outputFileUri);*/

            startActivityForResult( intent, CAMERA_REQUEST );
            /////////////////////////////////////



        }

        if(v.equals(b))
        {
            //Toast.makeText(getContext(), "mobile:"+mobile, Toast.LENGTH_LONG).show();

            /*Calling number*/
            ////////////////////////////////////////////////
            Uri number = Uri.parse("tel:" +mobile);
            Intent callIntent = new Intent(Intent.ACTION_CALL, number);
            startActivity(callIntent);
            ////////////////////////////////////////////////

        }

    }

    ///setting image in display
    ///////////////////////////////////////////////////////////
     public void onActivityResult(int requestCode, int resultCode, Intent data) {  
            if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) 
            {  
                /*if (data != null) {


                    File photo = new File(Environment.getExternalStorageDirectory()+"/Frag_list/"+value+".jpg");  

                    Uri imgUri=Uri.fromFile(photo);
                    img.setImageURI(imgUri);

                    /*
                    img.setImageBitmap((Bitmap) data.getExtras().get("data")); // this is image view where you want to set image
                    Log.d("camera ---- > ", "" + data.getExtras().get("data"));

                }*/

                File image = new  File(Environment.getExternalStorageDirectory() +"/Frag_list/"+value+".jpg"); 
                if(image.exists()){

                         img.setImageBitmap(BitmapFactory.decodeFile(image.getAbsolutePath()));/////////////setting image in imageview
            }

            }


        }
     ////////////////////*/


}
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

  <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.newfragment"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

     <uses-permission android:name="android.permission.CAMERA" />
     <uses-feature android:name="android.hardware.camera"  android:required="false" />
     <uses-feature android:name="android.hardware.camera.autofocus" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.CALL_PHONE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        >
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation" 
             >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

Logcat

    10-05 11:07:06.480: E/AndroidRuntime(4921): FATAL EXCEPTION: main
10-05 11:07:06.480: E/AndroidRuntime(4921): java.lang.NullPointerException
10-05 11:07:06.480: E/AndroidRuntime(4921):     at com.example.newfragment.TextFragment.change(TextFragment.java:48)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at com.example.newfragment.MenuFragment.onListItemClick(MenuFragment.java:85)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.support.v4.app.ListFragment$2.onItemClick(ListFragment.java:58)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.widget.AdapterView.performItemClick(AdapterView.java:298)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.widget.AbsListView.performItemClick(AbsListView.java:1128)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2815)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.widget.AbsListView$1.run(AbsListView.java:3574)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.os.Handler.handleCallback(Handler.java:800)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.os.Handler.dispatchMessage(Handler.java:100)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.os.Looper.loop(Looper.java:194)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at android.app.ActivityThread.main(ActivityThread.java:5371)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at java.lang.reflect.Method.invokeNative(Native Method)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at java.lang.reflect.Method.invoke(Method.java:525)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
10-05 11:07:06.480: E/AndroidRuntime(4921):     at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

ActivityMain.xml

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

    <fragment
        android:id="@+id/list_Fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        class="com.example.newfragment.MenuFragment" >
    </fragment>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

ActivityMain.xml of landscpae

<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="horizontal"
    tools:context="com.example.newfragment.MainActivity">


    <fragment
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="1"
        class="com.example.newfragment.MenuFragment"
        android:id="@+id/fragment"/>
    <fragment
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2"
        class="com.example.newfragment.TextFragment"
        android:id="@+id/fragment2"/>




</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

ListFragment.xml // for the listview

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@android:id/list" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

TextFragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#5ba4e5"
    >
    <ImageView
                android:id="@+id/img"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_marginTop="20dp"
                android:layout_marginLeft="30dp"
                android:onClick="imageClick"
                android:src="@drawable/ic_launcher"
                 />

    <TableLayout
        android:id="@+id/tb"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         >

        <TableRow>

            <TextView
                android:id="@+id/address"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Address"
                android:textColor="#ffffff"
                android:textSize="20sp"
                android:layout_marginLeft="40dp"
                android:layout_marginTop="30dp" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <Button
                android:id="@+id/b"
                android:layout_marginLeft="40dp"
                android:layout_marginTop="30dp"
                android:layout_span="2"
                android:background="#ffffff"
                android:text="Mobile"

                android:textColor="#000000" />
        </TableRow>
    </TableLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

Screenshots

image of app in landscape mode, after clicking an item from the list

Current situation of the portait mode after following the suggestions suggested in the answers:

点击列表中的项目后,应用程序在portait模式下的图像

UPDATE

I am able to overcome the crashing problem and to move to next screen after clicking on items from the listview while in portait mode currently, but the view is returning null there; means the contents which I want to be displayed there (blue part of the screenshot) is not displaying, the screen is blank.

Here is the updated code:

MenuFragment.java

public class MenuFragment extends ListFragment {

    int i; 

    private String[] FilePathStrings;
    private String[] FileNameStrings;
     File[] listFile;//for photo
    String[] name = new String[] 
            { "Sri","Sud","Urmila","Amrita","Indra","Ayan",
            "Leo","Neymar","Robin","Ian","Suarez","Mesut","Bastin",
            "Rooney","Ranti","Dong Hyun","Barisich","Andrew" };

    String[] address = new String[]
            {"Dumdum","Dumdum","Dumdum","Dumdum","Lake Town",
            "Salkia","Argentina","Brazil","Netherlands"};

    String [] mobile = new String[]{"456456456","56564565","787687866",
                "645645645","5654576457","76897978978","768768567"};



    String [] photo = new String[]{};



    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
        View view =inflater.inflate(R.layout.list_fragment, container, false);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, name);
        setListAdapter(adapter);



        return view;


    }





    /////////////////////sending data to TextFragment//////////////////
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {

///////////accessing files from sd card///////
         File file = new  File(Environment.getExternalStorageDirectory() +"/Frag_list/");
         if (file.isDirectory()) {
            listFile = file.listFiles();

            // Create a String array for FilePathStrings
            FilePathStrings = new String[listFile.length];


            for (i = 0; i < listFile.length; i++) {
                // Get the path of the image file
                FilePathStrings[i] = listFile[i].getAbsolutePath();

            }
        }

         //////////////////////////////


        int orientation = getResources().getConfiguration().orientation; 
        if (Configuration.ORIENTATION_LANDSCAPE == orientation) { 
            //Do SomeThing; // Landscape




            TextFragment txt = (TextFragment)getFragmentManager().findFragmentById(R.id.fragment2);
            txt.change(position,address[position],mobile[position]);
            getListView().setSelector(android.R.color.holo_blue_dark);

        } else { 
            //Do SomeThing;  // Portrait
            //Toast.makeText(getContext(),address[position] , Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)

//////////////updated code here///////////////

        **Intent intent = new Intent(getActivity(), TextFragment2.class);
        Bundle bundle = new Bundle();
        bundle.putString("message", address[position]);
        intent.putExtras(bundle);
        getActivity().startActivity(intent);**





}

}  
Run Code Online (Sandbox Code Playgroud)

}

TextFragment.java

public class TextFragment2 extends Activity implements OnClickListener {
    TextView text,add;
    private ImageView img;
    Button b;
    int value;
    String mobile,txt;
    File photo;
    private static final int CAMERA_REQUEST = 1888; 
    Camera camera;

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

        View view = inflater.inflate(R.layout.text_fragment, container, false);

        add= (TextView)view.findViewById(R.id.address);
        img= (ImageView)view.findViewById(R.id.img);

        //////////////////
        /*File image = new  File(Environment.getExternalStorageDirectory() +"/Frag_list/"+value+".jpg"); 
        if(image.exists())
            {

                     img.setImageBitmap(BitmapFactory.decodeFile(image.getAbsolutePath()));/////////////setting image in imageview
            }*/


        //////////////////////
        b= (Button)view.findViewById(R.id.b);

        img.setOnClickListener(this);
        b.setOnClickListener(this);

        //Intent intent = getActivity().getIntent();
        //String message = intent.getStringExtra("message");
Run Code Online (Sandbox Code Playgroud)

/////////////////////updated code here////////////////

Bundle bundle= getIntent().getExtras(); txt= bundle.getString("message");

    **add.setText(txt);**

    return view;

}



@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v.equals(img))
    {
        //Toast.makeText(getContext(), "Camera", Toast.LENGTH_LONG).show();


        /*///////////camera hardware///////////
        Parameters parameters = camera.getParameters();//////////////PROBLEM: APP GETTING CRASHED WHEN USED
        parameters.setPictureSize(80, 80);
        camera.setParameters(parameters);
        camera = Camera.open();
        ///////////////////////////////////////*/



        /*Clicking and saving image to sd card*/
        //////////////////////////////////////
        File file = new File(Environment.getExternalStorageDirectory(), "Frag_list");
        file.mkdirs();

        String path = Environment.getExternalStorageDirectory() +"/Frag_list/"+value+".jpg";
        File file2= new File(path);
        Uri outputFileUri = Uri.fromFile( file2 );
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
        //intent.putExtra("android.media.action.IMAGE_CAPTURE", outputFileUri ); ///////for displaying image
        intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri ); //////////for saving image

        /*Bundle b = new Bundle();
        b.putString("android.media.action.IMAGE_CAPTURE", outputFileUri);*/

        startActivityForResult( intent, CAMERA_REQUEST );
        /////////////////////////////////////



    }

    if(v.equals(b))
    {
        //Toast.makeText(getContext(), "mobile:"+mobile, Toast.LENGTH_LONG).show();

        /*Calling number*/
        ////////////////////////////////////////////////
        Uri number = Uri.parse("tel:" +mobile);
        Intent callIntent = new Intent(Intent.ACTION_CALL, number);
        startActivity(callIntent);
        ////////////////////////////////////////////////

    }

}

///setting image in display
///////////////////////////////////////////////////////////
 public void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) 
        {  
            /*if (data != null) {


                File photo = new File(Environment.getExternalStorageDirectory()+"/Frag_list/"+value+".jpg");  

                Uri imgUri=Uri.fromFile(photo);
                img.setImageURI(imgUri);

                /*
                img.setImageBitmap((Bitmap) data.getExtras().get("data")); // this is image view where you want to set image
                Log.d("camera ---- > ", "" + data.getExtras().get("data"));

            }*/

            File image = new  File(Environment.getExternalStorageDirectory() +"/Frag_list/"+value+".jpg"); 
            if(image.exists()){

                     img.setImageBitmap(BitmapFactory.decodeFile(image.getAbsolutePath()));/////////////setting image in imageview
        }

        }


    }
 ////////////////////*/
Run Code Online (Sandbox Code Playgroud)

}


CASE SOLVED

Changed the public View oncreateView to protected void onCreate! :)

public class TextFragment2 extends Activity implements OnClickListener {
    TextView text,add;
    private ImageView img;
    Button b;
    int value;
    String mobile,txt;
    File photo;
    private static final int CAMERA_REQUEST = 1888; 
    Camera camera;

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

        add= (TextView)findViewById(R.id.address);
        img= (ImageView)findViewById(R.id.img);

        b= (Button)findViewById(R.id.b);

        img.setOnClickListener(this);
        b.setOnClickListener(this);
        Bundle bundle= getIntent().getExtras();
        txt= bundle.getString("message");
        add.setText(txt);

    }
Run Code Online (Sandbox Code Playgroud)

Screenshots of portrait mode:

从列表中单击

小智 0

public class TextFragment2 extends Activity implements OnClickListener {
    TextView text,add;
    private ImageView img;
    Button b;
    int value;
    String mobile,txt;
    File photo;
    private static final int CAMERA_REQUEST = 1888; 
    Camera camera;

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

        add= (TextView)findViewById(R.id.address);
        img= (ImageView)findViewById(R.id.img);

        b= (Button)findViewById(R.id.b);

        img.setOnClickListener(this);
        b.setOnClickListener(this);
        Bundle bundle= getIntent().getExtras();
        txt= bundle.getString("message");
        add.setText(txt);

    }
Run Code Online (Sandbox Code Playgroud)