我正在寻求帮助将Recyclerview从最后一个ID排序到第一个ID。如何将Recyclerview从最后一个ID排序到第一个ID?
我想在recyclerview中显示,当我在数据库中添加一行时。
如何显示数据库中最后一行作为列表中的第一张卡片?
这是我的PHP代码:
<?php
//Creating a connection
$con = mysqli_connect("--","---","----","-----");
/* change character set to utf8 */
$con->set_charset("utf8");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
/*Get the id of the last visible item in the RecyclerView from the request and store it in a variable. For the first request id will be zero.*/
$id = $_GET["id"];
$sql= "Select * from movies_table where id between ($id+1) and ($id+10)";
$result = mysqli_query($con ,$sql);
while ($row = mysqli_fetch_assoc($result)) {
$array[] = $row;
}
header('Content-Type: text/html; charset=utf-8');
echo json_encode($array, JSON_UNESCAPED_UNICODE);
mysqli_free_result($result);
mysqli_close($con);
?>
,这我recyclerview类:
public class ThreeFragment extends Fragment{
private static final String TAG = ThreeFragment.class.getSimpleName();
private List<Movie> movies;
private RecyclerView recyclerView;
private GridLayoutManager gridLayout;
private MoviesAdapter adapter;
public ThreeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_three, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
movies = new ArrayList<>();
getMoviesFromDB(0);
gridLayout = new GridLayoutManager(getActivity(), 2);
recyclerView.setLayoutManager(gridLayout);
adapter = new MoviesAdapter(getActivity(), movies);
recyclerView.setAdapter(adapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (gridLayout.findLastCompletelyVisibleItemPosition() == movies.size() - 1) {
getMoviesFromDB(movies.get(movies.size() - 1).getId());
}
}
});
return view;
}
private void getMoviesFromDB(int id) {
AsyncTask<Integer, Void, Void> asyncTask = new AsyncTask<Integer, Void, Void>() {
ProgressDialog pdLoading = new ProgressDialog(getActivity());
@Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("\tدر حال بارگذاری...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected Void doInBackground(Integer... movieIds) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://astaneapp.ir/wp-php/movies.php?id=" + movieIds[0])
.build();
try {
Response response = client.newCall(request).execute();
JSONArray array = new JSONArray(response.body().string());
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
Movie movie = new Movie(object.getInt("id"), object.getString("movie_name"),
object.getString("movie_image"), object.getString("movie_genre") , object.getString("movie_discription") , object.getString("movie_lat"), object.getString("movie_lon") , object.getString("movie_marker"));
ThreeFragment.this.movies.add(movie);
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
adapter.notifyDataSetChanged();
pdLoading.dismiss();
}
};
asyncTask.execute(id);
}
}
我需要发送适配器类代码?
感谢您的回答,我收到此错误:不兼容的类型:int不能转换为长 –
你可以转换为整数,更新我的答案。 –
谢谢,这段代码对我来说也有点问题,唯一的问题是我想把数据加载10到10.你能帮我解决这个问题吗?我发布了新的修改后的代码 –