Next Previous 使用 Android Listview 和 JSON 数据
Posted
技术标签:
【中文标题】Next Previous 使用 Android Listview 和 JSON 数据【英文标题】:Next Previous with Android Listview and JSON data 【发布时间】:2019-04-14 23:05:35 【问题描述】:我想用 php REST API 开发一个 MCQ 应用。 如何通过单击 Next 和 Previous 按钮在 ListView 中一一显示问题。
我的 JSON 数据如下,由 PHP API 从我的实时服务器检索到
[
"id": 1,
"title": "Apple MacBook ",
"shortdesc": "13.3 inch, Silver",
"rating": 4.7,
"price": 56990,
"image": "https:\/\/www.laptopmag.com\/images\/uploads\/4427\/g\/apple-macbook-air-13inch-w-g03.jpg",
"mid": 1
,
"id": 2,
"title": "Dell Inspiron",
"shortdesc": "14 inch, Gray",
"rating": 4.3,
"price": 60990,
"image": "https:\/\/www.laptopmag.com\/images\/uploads\/4442\/g\/dell-inspiron-15-7000-w-g02.jpg",
"mid": 1
,
"id": 3,
"title": "Microsoft Surface ",
"shortdesc": "12.3 inch, Silver",
"rating": 4.2,
"price": 54999,
"image": "https:\/\/images-na.ssl-images-amazon.com\/images\/I\/41JOpEMJsDL.jpg",
"mid": 1
,
"id": 5,
"title": "Computer Two",
"shortdesc": "This is second computer",
"rating": 5,
"price": 34000,
"image": "image 2",
"mid": 1
]
我的 Java 方法,仅在第一次单击按钮时调用。
private void getQuestions (final String subject_id)
String tag_string_req = "req_login";
StringRequest strReq = new StringRequest(Request.Method.POST,
AppConfig.URL_GET_ALL_PRODUCTS_API, new Response.Listener<String>()
@Override
public void onResponse(String response)
try
JSONArray array = new JSONArray(response);
for (int i = 0; i < array.length(); i++)
JSONObject Obj = array.getJSONObject(i);
Questions questions = new Questions(Obj.getString("title"), Obj.getString("shortdesc"));
QuestionsList.add(questions);
ListViewAdapter adapter = new ListViewAdapter(QuestionsList,ShowSubjects.this);
//adapter.refreshQuestionsList(QuestionsList);
listView.setAdapter(adapter);
catch (JSONException e)
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Log.e(TAG, "Login Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
// hideDialog();
)
@Override
protected Map<String, String> getParams()
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("proID", subject_id);
return params;
;
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
我的设计
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".ShowSubjects">
<EditText
android:id="@+id/editText"
android:layout_
android:layout_
android:layout_marginTop="16dp"
android:ems="10"
android:inputType="textPersonName"
android:text="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.152"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button2"
android:layout_
android:layout_
android:layout_marginTop="12dp"
android:text="Get Questions"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ListView
android:id="@+id/productList"
android:layout_
android:layout_
android:layout_marginStart="8dp"
android:layout_marginTop="76dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintEnd_toStartOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnNext"
android:layout_
android:layout_
android:layout_marginEnd="17dp"
android:layout_marginBottom="38dp"
android:text="Next"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<Button
android:id="@+id/btnPrev"
android:layout_
android:layout_
android:layout_marginStart="16dp"
android:layout_marginBottom="38dp"
android:text="Prev"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
这是我的 ListViewAdaptor
public class ListViewAdapter extends ArrayAdapter<Questions>
//the Questions list that will be displayed
private List<Questions> QuestionsList;
//the context object
private Context mCtx;
//here we are getting the Questionslist and context
//so while creating the object of this adapter class we need to give Questionslist and context
public ListViewAdapter(List<Questions> QuestionsList, Context mCtx)
super(mCtx, R.layout.list_items, QuestionsList);
this.QuestionsList = QuestionsList;
this.mCtx = mCtx;
//this method will return the list item
@Override
public View getView(int position, View convertView, ViewGroup parent)
//getting the layoutinflater
LayoutInflater inflater = LayoutInflater.from(mCtx);
//creating a view with our xml layout
View listViewItem = inflater.inflate(R.layout.list_items, null, true);
//getting text views
TextView textViewName = listViewItem.findViewById(R.id.textViewName);
TextView textViewImageUrl = listViewItem.findViewById(R.id.textViewImageUrl);
//Getting the Questions for the specified position
Questions Quest = QuestionsList.get(position);
//setting Questions values to textviews
textViewName.setText(Quest.getQuestion());
textViewImageUrl.setText(Quest.getOption1());
//returning the listitem
return listViewItem;
public void refreshQuestionsList(List<Questions> QuestionsList)
this.QuestionsList.clear();
this.QuestionsList.addAll(QuestionsList);
notifyDataSetChanged();
如何在下一个和上一个按钮上显示数据。
【问题讨论】:
listview 项和适配器在哪里? 适配器添加到问题 您想在屏幕上一次显示一个项目,其中包含所有详细信息,当您单击下一个或上一个时,它应该显示另一个。对吧? @RohitSingh 是的 【参考方案1】:我不会写代码。我可以提出如何实现它的建议,因为我在处理同类型的项目方面有一些经验。
-
解析列表中的数据
创建一个
ListActivity
和一个DetailActivity
单击项目时打开DetailActivity
并显示当前
项目。
如何在DetailActivity中显示数据?
您可以通过使用意图传递列表项的对象来启动DetailActivity
。更简单的方法是,将列表设为静态,以便所有人都可以访问它活动。在这种方法中,您只需在启动详细 Activity 时传递 item(int) 的索引值。
这种方法的优点
-
从详细信息移至下一个和上一个项目时会派上用场
活动你可以有一个方法来详细显示项目
活动。
您不必使用 Parceable 或 Serilizable 接口实现 Model 类。
如何导航到 DetailActivity 中的上一个和下一个项目?
创建一个显示当前问题的方法。
displayQuestion(int index);
当点击下一个按钮时,做
displayQuestion(index++);
和以前的
dispalyQuestion(index--);
你可以看看这个project。您可能会找到一些相关信息
【讨论】:
感谢您的回答,如果成功,我会在完成您的项目后尝试。以上是关于Next Previous 使用 Android Listview 和 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章
BeautifulSoup的高级应用 之.parent .parents .next_sibling.previous_sibling.next_siblings.previous_siblings(
我想知道基于哪个时区或区域设置 MAQL 时间 marcos 'THIS'、'PREVIOUS'、'NEXT' 工作