如何从不同的java文件刷新Fragment?

时间:2016-09-07 23:33:49

标签: android android-fragments

这是来自'不同的java文件'的我的java:

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;
    }
}

这是我的片段java代码:

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();
    }
}

为了更深入,我想弄清楚的是如何从不同的java文件中刷新片段?

我们的目标是像Facebook一样提供Feed,但它不会加载我们发布的帖子。怎么可能呢? (如果可能,最好使用Google排球请求)

1 个答案:

答案 0 :(得分:0)

如果不同的java文件是片段的容器活动,那么该活动必须具有该特定片段的引用,您可以轻松地使用此实例控制片段。但请确保当您显示此片段时,然后是您在活动中使用的实例,该实例用于显示您在片段中已更改的内容,您将无法获得该更新。你的代码是用于片段的:

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);

每次都会创建新的片段实例。根据您的要求,这应该是:

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);

现在有了片段的引用,你可以对片段做任何你想做的事情。在上面的代码片段中,引用是局部变量,您可以将其设置为全局,并从活动中的任何位置访问此引用。

如果您有任何疑问,请告诉我。