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(

html 使用Jquery的Next和Previous分页

wod按next和previous post link

我想知道基于哪个时区或区域设置 MAQL 时间 marcos 'THIS'、'PREVIOUS'、'NEXT' 工作

ListIterator 在 next() 和 previous() 的交替调用中重复元素

previous and next permutation