刷新按钮onClick Listview数据必须在android中获得更新

时间:2012-09-17 04:53:08

标签: android android-layout android-intent android-emulator

  

可能重复:
  How to refresh Android listview?

我正在寻找使用刷新按钮刷新列表视图数据.DES:在我的应用程序中,当我点击它时有刷新按钮Listview数据来自服务器必须得到刷新&显示更新列表视图数据 我不知道该怎么做。 PLZ建议我举例..提前谢谢。下面是我的代码。

Mainactivity.java

listView = (ListView) findViewById(R.id.homelistView);
listView.setTextFilterEnabled(true);   
final EfficientAdapter objectAdapter = new EfficientAdapter(this);
listView.setAdapter(objectAdapter);


Button refreshButton= (Button)findViewById(R.id.refreshButton);
 refreshButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    objectAdapter.notifyDataSetChanged();

    }
});

EfficientAdapter.java

public static class EfficientAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private Context context;

    public EfficientAdapter(Context context) {
        mInflater = LayoutInflater.from(context);
        this.context=context;

    }


    public int getCount() {
        return CountriesList.name.length;
    }

    public Object getItem(int position) {

        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.homemplebrowview, null);
            holder = new ViewHolder();
            holder.text1 = (TextView) convertView
                    .findViewById(R.id.name);
            holder.text2 = (TextView) convertView
                    .findViewById(R.id.mrn);
            holder.text3 = (TextView) convertView
                    .findViewById(R.id.date);
            holder.text4 = (TextView) convertView
                    .findViewById(R.id.age);
            holder.text5 = (TextView) convertView
                    .findViewById(R.id.gender);
            holder.text6 = (TextView) convertView
                    .findViewById(R.id.wardno);
            holder.text7 = (TextView) convertView
                    .findViewById(R.id.roomno);
            holder.text8 = (TextView) convertView
                    .findViewById(R.id.bedno);                  
            holder.btnList = (Button)convertView.findViewById(R.id.listbutton);
         //   holder.btnList.setOnClickListener(this);

            holder.btnList.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {                       
                    Intent next=new Intent(context, SeviceDetails.class);
                    context.startActivity(next);
                }
            });


            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.text1.setText(CountriesList.name[position]);
        holder.text2.setText(CountriesList.mrn[position]);
        holder.text3.setText(CountriesList.actualstart[position]);
        holder.text4.setText(CountriesList.age[position]);
        holder.text5.setText(CountriesList.gender[position]);
        holder.text6.setText(CountriesList.wardNo[position]);
        holder.text7.setText(CountriesList.roomNo[position]);
        holder.text8.setText(CountriesList.bedNo[position]);

        return convertView;
    }


    static class ViewHolder {
        public Button btnList;
        public TextView text8;
        public TextView text7;
        public TextView text6;
        public TextView text5;
        public TextView text4;
        public TextView text1;
        public TextView text2;
        public TextView text3;
    }

    @Override
    public void notifyDataSetChanged() // Create this function in your adapter class
    {
        super.notifyDataSetChanged();
    }


}



}

4 个答案:

答案 0 :(得分:2)

在适配器中添加新值并调用notifyDataSetChanged

按照步骤更新列表视图。

1) First Add new values to your CountriesList .
2) Before Assign EfficientAdapter to listiew, make one object of it and then assign that object.
3) Create one function in your  EfficientAdapter class called notifyDataSetChanged().
4) Call notifyDataSetChanged() function using EfficientAdapter object.

实施例

EfficientAdapter objectAdapter = new EfficientAdapter(this);
listView.setAdapter(objectAdapter);

@Override
public void notifyDataSetChanged() // Create this function in your adapter class
{
    super.notifyDataSetChanged();
}

现在在刷新按钮的onClick事件上调用objectAdapter.notifyDataSetChanged()。

答案 1 :(得分:2)

你可以做这样的事情

public class Mainactivity extends Activity{

ListView listView;
EfficientAdapter objectAdapter;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainlayout);

listView = (ListView) findViewById(R.id.homelistView);
listView.setTextFilterEnabled(true);   
objectAdapter = new EfficientAdapter(this);
listView.setAdapter(objectAdapter);


Button refreshButton= (Button)findViewById(R.id.refreshButton);
 refreshButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

       objectAdapter = new EfficientAdapter(Mainactivity.this);// adapter with new data
       listView.setAdapter(objectAdapter);
       objectAdapter.notifyDataSetChanged();

    }
});

}

}

这是我想告诉你的一个例子:

public class second extends Activity{

    ListView listView;
    ArrayAdapter<String> adapter;
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);

        listView=(ListView) findViewById(R.id.listView1);
        button=(Button) findViewById(R.id.button1);

        String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",  
                "Jupiter", "Saturn", "Uranus", "Neptune"};    
        ArrayList<String> planetList = new ArrayList<String>();  
        planetList.addAll( Arrays.asList(planets) );  

        // Create ArrayAdapter using the planet list.  
        adapter = new ArrayAdapter<String>(this, R.layout.simplerow, planetList);  

        listView.setAdapter(adapter);

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String[] planets = new String[] { "Mercury m", "Venus m", "Earth m", "Mars m",  
                        "Jupiter m", "Saturn m", "Uranus m", "Neptune m"};    
                ArrayList<String> planetList = new ArrayList<String>();  
                planetList.addAll( Arrays.asList(planets) );  
                adapter = new ArrayAdapter<String>(second.this, R.layout.simplerow, planetList);

                listView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }
        });

    }

}

R.layout.simplerow:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/rowTextView" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content"
 android:padding="10dp"
 android:textSize="16sp" >
</TextView>

和R.layout.second:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >





    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

    </ListView>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>

答案 2 :(得分:0)

Button refreshButton= (Button)findViewById(R.id.refreshButton);
 refreshButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    /*Intent next=new Intent(MainActivity.this, SeviceDetails.class);
    startActivity(next);*/
     Do a notifyDataSetChanged();

    }
});

点击More Info

答案 3 :(得分:0)

您必须向CountriesList添加新值并调用notifyDataSetChanged()API。