Преобразуйте это действие во фрагмент - PullRequest
0 голосов
/ 06 июня 2018

Я хотел бы помочь, чтобы иметь возможность преобразовать это действие во фрагмент.

Это часть чата, в которой будут участвовать пользователи, согласившиеся общаться с ними, я не оченьэксперт в этом языке.

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

    usersList = (ListView)findViewById(R.id.usersList);
    noUsersText = (TextView)findViewById(R.id.noUsersText);

    pd = new ProgressDialog(Users.this);
    pd.setMessage("Loading...");
    pd.show();

    String url = "https://androidchatapp-76776.firebaseio.com/users.json";

    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>(){
        @Override
        public void onResponse(String s) {
            doOnSuccess(s);
        }
    },new Response.ErrorListener(){
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            System.out.println("" + volleyError);
        }
    });

    RequestQueue rQueue = Volley.newRequestQueue(Users.this);
    rQueue.add(request);

    usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            UserDetails.chatWith = al.get(position);
            startActivity(new Intent(Users.this, Chat.class));
        }
    });
}

public void doOnSuccess(String s){
    try {
        JSONObject obj = new JSONObject(s);

        Iterator i = obj.keys();
        String key = "";

        while(i.hasNext()){
            key = i.next().toString();

            if(!key.equals(UserDetails.username)) {
                al.add(key);
            }

            totalUsers++;
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    if(totalUsers <=1){
        noUsersText.setVisibility(View.VISIBLE);
        usersList.setVisibility(View.GONE);
    }
    else{
        noUsersText.setVisibility(View.GONE);
        usersList.setVisibility(View.VISIBLE);
        usersList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, al));
    }

    pd.dismiss();
}
}

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Шаг 1. На ваш activity_users.xml поместите его FrameLayout тег

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

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    ...

</...>

Шаг 2. Создайте свой фрагмент следующим образом:

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import yourpackage.R;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MyFragment extends Fragment {
    private ListView usersList;
    private TextView noUsersText;
    private ProgressDialog pd;
    private int totalUsers;
    private List<String> al;

    public MyFragment() { }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);
        usersList = view.findViewById(R.id.usersList);
        noUsersText = view.findViewById(R.id.noUsersText);

        pd = new ProgressDialog(Users.this);
        pd.setMessage("Loading...");
        pd.show();

        String url = "https://androidchatapp-76776.firebaseio.com/users.json";

        StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>(){
            @Override
            public void onResponse(String s) {
                doOnSuccess(s);
            }
        },new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                System.out.println("" + volleyError);
            }
        });

        RequestQueue rQueue = Volley.newRequestQueue(Users.this);
        rQueue.add(request);

        usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                UserDetails.chatWith = al.get(position);
                startActivity(new Intent(getActivity(), Chat.class));
            }
        });
        return view;
    }

    public void doOnSuccess(String s){
        try {
            JSONObject obj = new JSONObject(s);
            al = new ArrayList<>();

            Iterator i = obj.keys();
            String key = "";

            while(i.hasNext()){
                key = i.next().toString();

                if(!key.equals(UserDetails.username)) {
                    al.add(key);
                }

                totalUsers++;
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

        if(totalUsers <=1){
            noUsersText.setVisibility(View.VISIBLE);
            usersList.setVisibility(View.GONE);
        }
        else{
            noUsersText.setVisibility(View.GONE);
            usersList.setVisibility(View.VISIBLE);
            usersList.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, al));
        }

        pd.dismiss();
    }
}

Шаг 3. В вашем activity Users положите MyFragment следующим образом:

FragmentManager fragMan = getSupportFragmentManager();
FragmentTransaction transaction = fragMan.beginTransaction();
transaction.replace(R.id.container, new MyFragment());
transaction.commit();

Это все.Ваша активность теперь это фрагмент

0 голосов
/ 06 июня 2018

После создания класса фрагмента добавьте это к onCreateView (просто разведите макет вместо setContent и getActivity() вместо this:

      @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.activity_users, container, false);


    usersList = (ListView)view.findViewById(R.id.usersList);
    noUsersText = (TextView)view.findViewById(R.id.noUsersText);

  return view;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    pd = new ProgressDialog(getContext());
    pd.setMessage("Loading...");
    pd.show();

    String url = "https://androidchatapp-76776.firebaseio.com/users.json";

    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>(){
        @Override
        public void onResponse(String s) {
            doOnSuccess(s);
        }
    },new Response.ErrorListener(){
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            System.out.println("" + volleyError);
        }
    });

    RequestQueue rQueue = Volley.newRequestQueue(getActivity());
    rQueue.add(request);

    usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            UserDetails.chatWith = al.get(position);
            startActivity(new Intent(getActivity(), Chat.class));
        }
    });
}

public void doOnSuccess(String s){
    try {
        JSONObject obj = new JSONObject(s);

        Iterator i = obj.keys();
        String key = "";

        while(i.hasNext()){
            key = i.next().toString();

            if(!key.equals(UserDetails.username)) {
                al.add(key);
            }

            totalUsers++;
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    if(totalUsers <=1){
        noUsersText.setVisibility(View.VISIBLE);
        usersList.setVisibility(View.GONE);
    }
    else{
        noUsersText.setVisibility(View.GONE);
        usersList.setVisibility(View.VISIBLE);
        usersList.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, al));
    }

    pd.dismiss();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...