On screen orientation loads again data with Async Task

Posted by Zookey on Stack Overflow See other posts from Stack Overflow or by Zookey
Published on 2014-05-27T21:20:58Z Indexed on 2014/05/27 21:24 UTC
Read the original article Hit count: 251

I make Android application with master/detail pattern. So I have

  • ListActivity class which is FragmentActivity and
  • ListFragment class which is Fragment

It all works perfect, but when I change screen orientation it calls again AsyncTask and reload all data.

Here is the code for ListActivity class where I handle all logic:

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

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);
    getActionBar().setTitle("Dnevni horoskop");


    if(findViewById(R.id.details_container) != null){
        //Tablet
        mTwoPane = true;

        //Fragment stuff
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        DetailsFragment df = new DetailsFragment();
        ft.add(R.id.details_container, df);
        ft.commit();
    }

    pb = (ProgressBar) findViewById(R.id.pb_list);
    tvNoConnection = (TextView) findViewById(R.id.tv_no_internet);
    ivNoConnection = (ImageView) findViewById(R.id.iv_no_connection);
    list = (GridView) findViewById(R.id.gv_list);

    if(mTwoPane == true){
        list.setNumColumns(1);
        //list.setPadding(16,16,16,16);
    }

    adapter = new CustomListAdapter();      

    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {
            pos = position;
            if(mTwoPane == false){
                Bundle bundle = new Bundle();
                bundle.putSerializable("zodiac", zodiacFeed);
                Intent i = new Intent(getApplicationContext(), DetailsActivity.class);
                i.putExtra("position", position);
                i.putExtras(bundle);
                startActivity(i);
                overridePendingTransition(R.anim.right_in, R.anim.right_out);
            }
            else if(mTwoPane == true){
                DetailsFragment fragment = (DetailsFragment) getSupportFragmentManager().findFragmentById(R.id.details_container);
                fragment.setHoroscopeText(zodiacFeed.getItem(position).getText());
                fragment.setLargeImage(zodiacFeed.getItem(position).getLargeImage());
                fragment.setSign("Dnevni horoskop - "+zodiacFeed.getItem(position).getName());
                fragment.setSignDuration(zodiacFeed.getItem(position).getDuration());
                 // inflate menu from xml
                /*if(menu != null){
                 MenuItem item = menu.findItem(R.id.share);
                 Toast.makeText(getApplicationContext(), item.getTitle().toString(), Toast.LENGTH_SHORT).show();
                }*/
            }

        }
    });

    if(!Utils.isConnected(getApplicationContext())){
        pb.setVisibility(View.GONE);
        tvNoConnection.setVisibility(View.VISIBLE);
        ivNoConnection.setVisibility(View.VISIBLE);
    }

   //Calling AsyncTask to load data
        Log.d("TAG", "loading");
        HoroscopeAsyncTask task = new HoroscopeAsyncTask(pb);
        task.execute();



}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
}

class CustomListAdapter extends BaseAdapter {

    private LayoutInflater layoutInflater;

    public CustomListAdapter() {

        layoutInflater = (LayoutInflater) getBaseContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
        // TODO Auto-generated method stub
        // Set the total list item count
        return names.length;
    }

    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        // Inflate the item layout and set the views
        View listItem = convertView;
        int pos = position;     

        zodiacItem = zodiacList.get(pos);

        if (listItem == null && mTwoPane == false) {
            listItem = layoutInflater.inflate(R.layout.list_item, null);
        }
        else if(mTwoPane  == true){
            listItem = layoutInflater.inflate(R.layout.tablet_list_item, null);

        }

        // Initialize the views in the layout
        ImageView iv = (ImageView) listItem.findViewById(R.id.iv_horoscope);
        iv.setScaleType(ScaleType.CENTER_CROP);
        TextView tvName = (TextView) listItem.findViewById(R.id.tv_zodiac_name);
        TextView tvDuration = (TextView) listItem.findViewById(R.id.tv_duration);


        iv.setImageResource(zodiacItem.getImage());
        tvName.setText(zodiacItem.getName());
        tvDuration.setText(zodiacItem.getDuration());   

        Animation animation =  AnimationUtils.loadAnimation(getBaseContext(), R.anim.push_up);

        listItem.startAnimation(animation);
        animation = null;
        return listItem;
    }

}

  private void getHoroscope() {     

    String urlString = "http://balkanandroid.com/download/horoskop/examples/dnevnihoroskop.php";
    try {
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(urlString);

        HttpResponse response = client.execute(post);
        resEntity = response.getEntity();
        response_str = EntityUtils.toString(resEntity);
        if (resEntity != null) {
            Log.i("RESPONSE", response_str);
            runOnUiThread(new Runnable() {
                public void run() {
                    try {                       

                        Log.d("TAG", "Response from server : n "
                                + response_str);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    } catch (Exception ex) {
        Log.e("TAG", "error: " + ex.getMessage(), ex);
    }
}

private class HoroscopeAsyncTask extends AsyncTask<String, Void, Void> {


    public HoroscopeAsyncTask(ProgressBar pb1){
        pb = pb1;
    }

    @Override
    protected void onPreExecute() {
        pb.setVisibility(View.VISIBLE);
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(String... params) {

        getHoroscope();

        try {
            Log.d("TAG", "test u try");

            JSONObject jsonObject = new JSONObject(response_str);
            JSONArray jsonArray = jsonObject.getJSONArray("horoscope");
            for(int i=0;i<jsonArray.length();i++){
                Log.d("TAG", "test u for");

                JSONObject horoscopeObj = jsonArray.getJSONObject(i);
                String horoscopeSign = horoscopeObj.getString("name_sign");
                String horoscopeText = horoscopeObj.getString("txt_hrs");

                zodiacItem = new ZodiacItem(horoscopeSign, horoscopeText, duration[i], images[i], largeImages[i]);
                zodiacList.add(zodiacItem);
                zodiacFeed.addItem(zodiacItem);

                //Treba u POJO klasu ubaciti sve.
                Log.d("TAG", "ZNAK: "+zodiacItem.getName()+" HOROSKOP: "+zodiacItem.getText());

            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.e("TAG", "error: " + e.getMessage(), e);

        }       

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        pb.setVisibility(View.GONE);
        list.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        super.onPostExecute(result);
    }


}

Here is the code for ListFragment class:

public class ListFragment extends Fragment {


@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

     // Retain this fragment across configuration changes.
    setRetainInstance(true);
    super.onCreate(savedInstanceState);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view = inflater.inflate(R.layout.fragment_list, container, false); 

    return view;
}

}

© Stack Overflow or respective owner

Related posts about android

Related posts about android-fragments