ListView的用法以及即时刷新

来源:互联网 发布:os x 10.10优化 编辑:程序博客网 时间:2024/06/04 23:44

最近写了一个关于Android开发的项目,其中用到了ListView,在这里总结一下。这是我的ListView

<?xml version="1.0" encoding="utf-8"?><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_width="match_parent"    android:layout_height="match_parent">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical">        <ListView            android:id="@+id/topicliist"            android:layout_width="match_parent"            android:layout_height="wrap_content"            tools:layout_editor_absoluteX="8dp"            tools:layout_editor_absoluteY="8dp" />    </LinearLayout></android.support.constraint.ConstraintLayout>

之后再创建一个自己想用ListView显示的Item,因为我的是显示选择题,所以会有点多

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/questionS"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="选择题"        android:textSize="28sp"/>    <RadioGroup        android:id="@+id/selectanwser"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical">            <RadioButton                android:id="@+id/optionA"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:textSize="28sp"/>            <RadioButton                android:id="@+id/optionB"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:textSize="28sp"/>            <RadioButton                android:id="@+id/optionC"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:textSize="28sp"/>            <RadioButton                android:id="@+id/optionD"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:textSize="28sp"/>     </RadioGroup></LinearLayout>

在Activity中

import android.content.DialogInterface;import android.content.Intent;import android.support.v7.app.ActionBar;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.AdapterView;import android.widget.EditText;import android.widget.ImageButton;import android.widget.ListView;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class TopicActivity extends AppCompatActivity {    private ListView topicList;    private List<Topic> topics=new ArrayList<Topic>();    private TopicAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_topic);        topicList=(ListView)findViewById(R.id.topicliist);        init();        adapter=new TopicAdapter(TopicActivity.this                ,R.layout.topic_select_item,topicSelect);        //将数据放入Adapter        topicList.setAdapter(adapter);        addquestion.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                LayoutInflater inflater = (LayoutInflater) TopicActivity.this.getSystemService(LAYOUT_INFLATER_SERVICE);    public void init()    {        Topic t2=new Topic();        t2.setQuestion("问题()");        t2.setA("A");        t2.setB("B");        t2.setC("C");        t2.setD("D");        topicSelect.add(t2);    }}

其中TopicAdapter如下:

package login.example.coursemanager;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.RadioButton;import android.widget.TextView;import java.util.List;public class TopicAdapter extends ArrayAdapter<Topic> {    private int resourceId;    private List<Topic> mlist;    public TopicAdapter(Context context,int textViewResourceId,List<Topic> objects)    {        super(context,textViewResourceId,objects);        resourceId=textViewResourceId;        mlist=objects;    }    public View getView(int position, View convertView, ViewGroup parent)    {        Topic topic=getItem(position);        View view ;        TopicAdapter.ViewHolder viewHolder;        if(convertView == null) {            view= LayoutInflater.from(getContext()).inflate(resourceId,parent,false);            viewHolder=new TopicAdapter.ViewHolder();            viewHolder.question=(TextView)view.findViewById(R.id.questionS);            viewHolder.optionA=(RadioButton)view.findViewById(R.id.optionA);            viewHolder.optionB=(RadioButton)view.findViewById(R.id.optionB);            viewHolder.optionC=(RadioButton)view.findViewById(R.id.optionC);            viewHolder.optionD=(RadioButton)view.findViewById(R.id.optionD);            view.setTag(viewHolder);        }        else        {            view=convertView;            viewHolder=(TopicAdapter.ViewHolder) view.getTag();        }        viewHolder.question.setText(topic.getQuestion());        viewHolder.optionA.setText(topic.getA());        viewHolder.optionB.setText(topic.getB());        viewHolder.optionC.setText(topic.getC());        viewHolder.optionD.setText(topic.getD());        return view;    }    class ViewHolder    {        TextView question;        RadioButton optionA;        RadioButton optionB;        RadioButton optionC;        RadioButton optionD;        TextView anwser;    }     public void refresh(List<Topic> l)    {        mlist=l;        notifyDataSetChanged();    }}

Topic只是一个普通的类,包含四个选项和问题的属性,均是String类型的。像这样写Adapter可以提高LIstView的效率,每次刷新不用全部重新加载。
对于ListView的即时更新问题,可以自己写一个refresh方法,也可以调用他自带的notifyDataSetChanged()方法,每次只要在List对象发生改变的时候最直接调用,就可以刷新ListView。

原创粉丝点击