0

Here's my java from 'different java file' :

public class MainPage extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    ArrayList<HashMap<String, String>> Item_List;
    TabLayout tabLayout;
    ViewPageAdapter viewPageAdapter;
    ViewPager viewPager;
    ImageView pfp;
    ProgressDialog PD_three;
    Bitmap bitmap;
    TextView usernameToolbar;
    Intent postActivity;
    Bitmap cropImg;
    private int PICK_IMAGE_REQUEST = 1;
    private String KEY_IMAGE = "ProfilePicture";
    private String KEY_NAME = "Name";
    private String KEY_USERTOKEN = "UserToken";
    private String UserToken;
    final int CROP_PIC_REQUEST_CODE = 1;

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

        initTypeface();

        PD_three = new ProgressDialog(this);
        PD_three.setCancelable(false);
        PD_three.setTitle("Please Wait...");
        PD_three.setMessage("Retrieving Data from Database...");

        getProfileInfo();


        String username = getIntent().getStringExtra("Username");
        TextView tv = (TextView) findViewById(R.id.usernameND);
        tv.setText(username);
        //id's
        pfp = (ImageView) findViewById(R.id.imageView_one);


        //SearchIntent
        Intent searchI = getIntent();
        if (Intent.ACTION_SEARCH.equals(searchI.getAction())) {

            String query = searchI.getStringExtra(SearchManager.QUERY);
            Toast.makeText(MainPage.this, query, Toast.LENGTH_SHORT).show();
        }

        //Toolbar
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle(null);

        //Tabs
        tabLayout = (TabLayout) findViewById(R.id.tablayout_two);
        viewPager = (ViewPager) findViewById(R.id.viewPager_two);
        viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager());
        viewPageAdapter.addFragments(new FeedFragment(), "Feed");
        viewPageAdapter.addFragments(new MessagesFragment(), "Messages");
        viewPageAdapter.addFragments(new NotificationsFragment(), "Notifications");
        viewPager.setAdapter(viewPageAdapter);
        tabLayout.setupWithViewPager(viewPager);

        //NavigationDrawer
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.profile) {

            Intent i = new Intent(this, Profile.class);
            startActivity(i);

        } else if (id == R.id.whatshot) {

            Intent i = new Intent(this, WhatsHot.class);
            startActivity(i);

        } else if (id == R.id.trending) {

            Intent i = new Intent(this, Trending.class);
            startActivity(i);

        } else if (id == R.id.radioplayer) {

            Intent i = new Intent(this, Radio.class);
            startActivity(i);

        } else if (id == R.id.musicplayer) {

            Intent i = new Intent(this, MusicPlayer.class);
            startActivity(i);

        } else if (id == R.id.settings) {

            Intent i = new Intent(this, Settings.class);
            startActivity(i);

        } else if (id == R.id.info) {

            Intent i = new Intent(this, Info.class);
            startActivity(i);

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main_menu, menu);

        SearchView searchView = (SearchView) menu.findItem(R.id.search_view).getActionView();
        SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        return super.onCreateOptionsMenu(menu);
    }

    //ImageInfo

    //Typeface
    private void initTypeface() {

        Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/Amble-Regular.ttf");
        TextView text = (TextView) findViewById(R.id.toolbarTitle);
        text.setTypeface(myTypeface);

        myTypeface = Typeface.createFromAsset(getAssets(), "fonts/Amble-Regular.ttf");
        text = (TextView) findViewById(R.id.usernameND);
        text.setTypeface(myTypeface);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Log.v(MainPage.class.getSimpleName(), "hey=" + requestCode + resultCode);
        if (resultCode == CROP_PIC_REQUEST_CODE || resultCode == 2 || resultCode == -1) {
            if (requestCode == CROP_PIC_REQUEST_CODE) {

                if (data != null) {
                    Bundle extras = data.getExtras();
                    Bitmap image = extras.getParcelable("data");
                    pfp.setImageBitmap(image);
                    UploadImage();

                    bitmap = image;
                }
            }
        }
    }

    private void getProfileInfo() {

        Intent I = getIntent();
        String Uname = I.getStringExtra("Username");
        final String Username = Uname.replaceAll("\\s", "");
        RequestQueue queue = Volley.newRequestQueue(MainPage.this);
        PD_three.show();


        String UPLOAD_URL = "http://10.0.0.177/Echo/ServerFilesApp/GetProfileInfo.php?Username=" + Username;
        StringRequest stringRequest = new StringRequest(Request.Method.GET, UPLOAD_URL, new Response.Listener<String>() {
            @Override
            public Bitmap onResponse(String response) {

                PD_three.dismiss();
                UserToken = response;
                getProfilePicture();

                return null;
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                        PD_three.dismiss();
                        Toast.makeText(MainPage.this, error.toString(), Toast.LENGTH_LONG).show();
                    }
                });

        queue.add(stringRequest);

    }

    private void getProfilePicture() {

        PD_three.show();

        RequestQueue queue = Volley.newRequestQueue(MainPage.this);
        String IMAGE_URL = "http://10.0.0.177/Echo/Users/" + UserToken + "/ProfilePicture.jpg";
        pfp = (ImageView) findViewById(R.id.imageView_one);

        ImageRequest request = new ImageRequest(IMAGE_URL,
                new Response.Listener<Bitmap>() {
                    @Override
                    public Bitmap onResponse(Bitmap bitmap) {
                        cropImg = Bitmap.createBitmap(bitmap, 0, 0, 99, 99);
                        pfp.setImageBitmap(cropImg);
                        PD_three.dismiss();
                        return cropImg;
                    }
                }, 0, 0, ImageView.ScaleType.FIT_CENTER, Bitmap.Config.RGB_565,
                new Response.ErrorListener() {
                    public void onErrorResponse(VolleyError error) {
                        PD_three.dismiss();
                        pfp.setImageResource(R.drawable.ic_user_b);
                        Toast.makeText(MainPage.this, "Error on retrieving profile pic.", Toast.LENGTH_LONG).show();
                    }
                });

        queue.add(request);

    }

    private void UploadImage() {

        RequestQueue queue = Volley.newRequestQueue(MainPage.this);
        String UPLOAD_URL = "http://10.0.0.177/Echo/ServerFilesApp/UpdateProfilePicture.php";
        PD_three.show();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
                new Response.Listener<String>() {
                    @Override
                    public Bitmap onResponse(String response) {
                        // getProfilePicture();
                        PD_three.dismiss();
                        Log.v(MainPage.class.getSimpleName(), "hey=hey");
                        getProfilePicture();
                        return null;
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        PD_three.dismiss();
                        Toast.makeText(MainPage.this, error.toString(), Toast.LENGTH_LONG).show();
                    }
                }) {

            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                String Image = getImageUri(bitmap);

                String Name = UserToken + "/ProfilePicture";

                Map<String, String> params = new Hashtable<String, String>();

                params.put(KEY_IMAGE, Image);
                params.put(KEY_NAME, Name);
                params.put(KEY_USERTOKEN, UserToken);

                return params;
            }
        };
        queue.add(stringRequest);
    }

    public String getImageUri(Bitmap bmp) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);

        return encodedImage;
    }

    public void postClick(View view) {
        Intent I = getIntent();
        String Uname = I.getStringExtra("Username");
        final String Username = Uname.replaceAll("\\s", "");

        //COMPRESS PFP
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        cropImg.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();

        postActivity = new Intent(MainPage.this, PostFragment.class);
        postActivity.putExtra("UserToken", UserToken);
        postActivity.putExtra("Username", Username);
        postActivity.putExtra("profilePicture", byteArray);

        MainPage.this.startActivity(postActivity);
        //MainPage.this.overridePendingTransition(R.anim.slide_down, R.anim.slide_up);
    }

    public void onPfpClick(View view) {

        Intent cropImage = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        cropImage.putExtra("crop", "true");
        cropImage.putExtra("aspectX", 1);
        cropImage.putExtra("aspectY", 1);
        cropImage.putExtra("outputX", 100);
        cropImage.putExtra("outputY", 100);
        cropImage.putExtra("return-data", true);
        setResult(RESULT_OK, cropImage);
        startActivityForResult(cropImage, CROP_PIC_REQUEST_CODE);
    }

    private String Username() {
        String Username = getIntent().getStringExtra("Username");
        return Username;
    }
}

Here's my fragment java code:

public class FeedFragment extends Fragment {
    private static final String TAG = FeedFragment.class.getSimpleName();
    private FeedListAdapter listAdapter;
    private List<FeedItem> feedItems;
    String UsernamePast;
    String UserTokenPast;
    Cache cache;
    Entry entry;
    String URL_FEED;

    @SuppressLint("NewApi")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_feed, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ListView listView = (ListView) getView().findViewById(R.id.FeedContentList);
        feedItems = new ArrayList<FeedItem>();
        listAdapter = new FeedListAdapter(getContext(), feedItems);
        listView.setAdapter(listAdapter);

        // We first check for cached request
        cache = AppController.getInstance().getRequestQueue().getCache();
        URL_FEED = "http://10.0.0.177/Echo/ServerFilesApp/feed.json";
        entry = cache.get(URL_FEED);

        getFeedContent();
    }

    public void getFeedContent() {

        if (entry != null) {
            // fetch the data from cache
            try {
                String data = new String(entry.data, "UTF-8");
                try {
                    parseJsonFeed(new JSONObject(data));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

        }  else {
            // making fresh volley request and getting json
            JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET,
                    URL_FEED, null, new Response.Listener<JSONObject>() {

                @Override
                public Bitmap onResponse(JSONObject response) {
                    VolleyLog.d(TAG, "Response: " + response.toString());
                    Log.v(TAG, "hey=" + "heu");
                    if (response != null) {
                        parseJsonFeed(response);
                    }

                    return null;
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                }
            });

            // Adding request to volley request queue
            AppController.getInstance().addToRequestQueue(jsonReq);
        }
    }
    /**
     * Parsing json response and passing the data to feed view list adapter
     */

    private void parseJsonFeed(JSONObject response) {
        try {
            JSONArray feedArray = response.getJSONArray("feed");

            for (int i = 0; i < feedArray.length(); i++) {
                JSONObject feedObj = (JSONObject) feedArray.get(i);

                FeedItem item = new FeedItem();
                item.setId(feedObj.getInt("id"));
                item.setName(feedObj.getString("name"));
                // Image might be null sometimes
                String image = feedObj.isNull("image") ? null : feedObj
                        .getString("image");
                item.setImage(image);
                item.setStatus(feedObj.getString("status"));
                item.setProfilePicture(feedObj.getString("profilePic"));
                item.setTimeStamp(feedObj.getString("timeStamp"));

                // url might be null sometimes
                String feedURL = feedObj.isNull("url") ? null : feedObj
                        .getString("url");
                item.setURL(feedURL);

                item.setLitBackground(R.drawable.fire);
                feedItems.add(item);
            }

            FeedItem item2 = new FeedItem();
            item2.setId(0);
            item2.setName("SORRY");

            // Image might be null sometimes
            item2.setImage(null);
            item2.setStatus("This Is Everything there is for Now. Refresh to get More Content");
            item2.setProfilePicture(null);
            item2.setTimeStamp(null);
            item2.setURL(null);

            feedItems.add(item2);


            // notify data changes to list adapter
            listAdapter.notifyDataSetChanged();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onResume() {
        super.onResume();

        getFeedContent();
    }

    @Override
    public void onPause() {
        super.onPause();

        cache.clear();
    }
}

To go more in depth, what I'm trying to figure out is how can I refresh a fragment from a different java file?

Our objective is to have feed like Facebook but it doesn't load the posts we post. How will that be possible? (preferably using Google Volley request, if possible)

Sufian
  • 6,405
  • 16
  • 66
  • 120
  • Possible duplicate of [Update ViewPager's Fragments from another class:](http://stackoverflow.com/questions/16794210/update-viewpagers-fragments-from-another-class) – Sufian Sep 14 '16 at 01:34

1 Answers1

0

If different java file is the container activity of fragment, then that activity must have the reference of that particular fragment, you can control the fragment with this instance easily. But make sure that when when you will show this fragment, then the instance you used in activity, that instance is used for showing otherwise what you have changed in the fragment you won't get that update. your code is for fragments:

tabLayout = (TabLayout) findViewById(R.id.tablayout_two);
viewPager = (ViewPager) findViewById(R.id.viewPager_two);
viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager());
viewPageAdapter.addFragments(new FeedFragment(), "Feed");
viewPageAdapter.addFragments(new MessagesFragment(), "Messages");
viewPageAdapter.addFragments(new NotificationsFragment(), "Notifications");
viewPager.setAdapter(viewPageAdapter);
tabLayout.setupWithViewPager(viewPager);

Here new instance of fragments are being created every time. According to your demands this should be:

FeedFragment feedFragment = new FeedFragment();
MessagesFragment messagesFragment = new MessagesFragment();
NotificationFragment notifyFragment = new NotificationFragment();

tabLayout = (TabLayout) findViewById(R.id.tablayout_two);
viewPager = (ViewPager) findViewById(R.id.viewPager_two);
viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager());
viewPageAdapter.addFragments(feedFragment, "Feed");
viewPageAdapter.addFragments(messagesFragment, "Messages");
viewPageAdapter.addFragments(notifyFragment, "Notifications");
viewPager.setAdapter(viewPageAdapter);
tabLayout.setupWithViewPager(viewPager);

Now with the references of fragment, you can do whatever you want to the fragment. Here in the above code snippet the references are local variable, you can make it global and access this reference from wherever you want in the activity.

Still if you have any question, let me know.

Sufian
  • 6,405
  • 16
  • 66
  • 120
  • But how could i be able to refresh this fragment in another class?? The code snippet has an error :( – Danny Isaac Sep 08 '16 at 00:33
  • do you want to inflate the ui or call something that exists in fragment? what i have give that will help to call anything of that fragment, won't inflate. if you want to re inflate the ui of fragment from activity then, you can re attach the fragment with viewpager. Fragment frg = null; frg = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG"); final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.detach(frg); ft.attach(frg); ft.commit(); – hasib prince Sep 08 '16 at 05:14