Android中的ListView刷新 [英] ListView Refresh in Android

查看:83
本文介绍了Android中的ListView刷新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有ListView的主要活动.然后,我进行第二项活动,其中有一个用于用户输入的文本框和一个按钮.当用户输入输入并单击按钮时,它应将项目添加到主活动的ListView中,但由于某种原因,ListView不会使用新数据刷新.关于如何进行此操作有任何想法吗?

解决方案

您的第二个活动B在活动a中看不到您的数据资源,因此,当您在活动B中添加新项目时,您必须通知活动A

已发生更改.您可以使用broadcastreceive获得此信息.在活动B中添加项目时,将广播接收到活动A.活动A收到更改并将其添加到dataresource中,并且仅在通知您的适配器之后.

请参见下面的示例.它行得通!

MainActivity.java

 公共类MainActivity扩展了AppCompatActivity {静态字符串[]自行车=新字符串[] {杜卡迪",本田",宝马","Bimota","Kawasaky","Yahamaha","Suzuky","Harlay-Davinson","Fantic","Morini","Hasquarna","Aprilia","Guzzi","Beta","Borile","Buell","Kymco","Ktm"};ArrayList< String>alBike =新的ArrayList(Arrays.asList(bike));私有ArrayAdapter适配器;@Override受保护的void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView listView =(ListView)findViewById(R.id.listView);按钮button =(按钮)findViewById(R.id.button2);adapter = new myadapter(getBaseContext(),0);listView.setAdapter(adapter);IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("ITEM_ADDED");BroadcastReceiver broadcastReceiver =新的BroadcastReceiver(){@Overridepublic void onReceive(Context context,Intent intent){字符串操作= intent.getAction();//Log.i("bogo",action);切换(操作){情况"ITEM_ADDED":字符串newitem = intent.getStringExtra("newitem");alBike.add(newitem);adapter.notifyDataSetChanged();休息;}}};registerReceiver(broadcastReceiver,intentFilter);button.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){startActivity(new Intent(getApplicationContext(),FormActivity.class));}});}公共类myadapter扩展了ArrayAdapter< String>.{公共myadapter(上下文上下文,int资源){超级(上下文,资源);}@Overridepublic int getCount(){返回alBike.size();}@Override公共长getItemId(int位置){返回0;}@Overridepublic View getView(int position,View convertView,ViewGroup parent){LayoutInflater inflater =(LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);查看行= inflater.inflate(R.layout.listviewrow,parent,false);TextView textView =(TextView)row.findViewById(R.id.textView);textView.setText(alBike.get(position));返回行}}} 

main_activity.xml

 <?xml version ="1.0" encoding ="utf-8"?>< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"xmlns:tools ="http://schemas.android.com/tools"android:orientation ="vertical"android:layout_width ="match_parent"android:layout_height ="match_parent"工具:context ="bogo.com.additemtolistview.MainActivity"><按钮style =?android:attr/buttonStyleSmall"android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:text =新商品"android:id ="@ + id/button2"android:layout_above ="@ + id/listView"android:layout_alignParentEnd ="true"android:layout_marginEnd ="198dp"/><列表视图android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:id ="@ + id/listView"android:layout_alignParentEnd ="true"android:layout_alignParentTop ="true"/></LinearLayout> 

FormActivity.java(您的活动B)

  package bogo.com.additemtolistview;导入android.content.Intent;导入android.support.v7.app.AppCompatActivity;导入android.os.Bundle;导入android.text.Editable;导入android.view.View;导入android.widget.Button;导入android.widget.EditText;公共类FormActivity扩展了AppCompatActivity {@Override受保护的void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_form);按钮button =(按钮)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){EditText editText =(EditText)findViewById(R.id.editText);字符串newitem = editText.getText().toString();Intent intent = new Intent("ITEM_ADDED");intent.putExtra("newitem",newitem);sendBroadcast(intent);结束();}});}} 

activity_form.xml

 <?xml version ="1.0" encoding ="utf-8"?>< RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android"xmlns:tools ="http://schemas.android.com/tools"android:layout_width ="match_parent"android:layout_height ="match_parent"android:paddingBottom ="@ dimen/activity_vertical_margin"android:paddingLeft ="@ dimen/activity_horizo​​ntal_margin"android:paddingRight ="@ dimen/activity_horizo​​ntal_margin"android:paddingTop ="@ dimen/activity_vertical_margin"工具:context ="bogo.com.additemtolistview.FormActivity">< EditTextandroid:layout_width ="220dp"android:layout_height ="wrap_content"android:id ="@ + id/editText"android:layout_alignParentTop ="true"android:layout_alignParentStart ="true"android:layout_marginStart ="78dp"android:layout_marginTop ="60dp"/><按钮android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:text =新建按钮"android:id ="@ + id/button"android:layout_centerVertical ="true"android:layout_alignStart ="@ + id/editText"/></RelativeLayout> 

listviewrow.xml

 <?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">< LinearLayoutandroid:orientation =水平"android:layout_width ="match_parent"android:layout_height ="48dp">< TextViewandroid:layout_width ="match_parent"android:layout_height ="wrap_content"android:text ="New Text"android:textColor ="@ android:color/black"android:id ="@ + id/textView"/></LinearLayout></LinearLayout> 

I have a main activity with a ListView. I then have a second activity with a text box for the user input and a button. When the user enters the input and clicks on the button, it should add the item to the ListView in the main activity but for some reason the ListView doesn't refresh with the new data. Any idea on how to go about this ?

解决方案

Your second activity B, can't see your data resource in activity a, therefore, when you add new item in activity B you must notify activity A

that a change has occurred. This you can obtain using broadcastreceive. When you add a item in activity B sendBroadcastreceive to activity A. Activity A receive the change add it to dataresource and only after notify your adapter.

See the example below. it work!

MainActivity.java

    public class MainActivity extends AppCompatActivity {

    static String[] bike = new String[]{
            "Ducati", "Honda", "BMW", "Bimota", "Kawasaky", "Yahamaha", "Suzuky", "Harlay-Davinson",
            "Fantic", "Morini", "Hasquarna", "Aprilia", "Guzzi", "Beta", "Borile", "Buell", "Kymco", "Ktm"

    };

    ArrayList<String> alBike = new ArrayList<>(Arrays.asList(bike));

    private ArrayAdapter adapter  ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = (ListView) findViewById(R.id.listView);
        Button button = (Button) findViewById(R.id.button2);

        adapter = new myadapter(getBaseContext(),0);
        listView.setAdapter(adapter);

        IntentFilter intentFilter =new IntentFilter();
        intentFilter.addAction("ITEM_ADDED");

        BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();

                // Log.i("bogo",action);
                switch (action) {
                    case "ITEM_ADDED":

                        String newitem = intent.getStringExtra("newitem");
                        alBike.add(newitem);
                        adapter.notifyDataSetChanged();
                        break;

                }
            }

        };
        registerReceiver(broadcastReceiver, intentFilter);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(getApplicationContext(),FormActivity.class));
        }
    });



    }

    public class myadapter extends ArrayAdapter<String> {

        public myadapter(Context context, int resource) {
            super(context, resource);
        }

        @Override
        public int getCount() {
            return alBike.size();
        }



        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row = inflater.inflate(R.layout.listviewrow, parent, false);
            TextView textView = (TextView) row.findViewById(R.id.textView);
            textView.setText(alBike.get(position));

            return row;
        }
    }
}

main_activity.xml

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

    tools:context="bogo.com.additemtolistview.MainActivity">

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="new item"
        android:id="@+id/button2"
        android:layout_above="@+id/listView"
        android:layout_alignParentEnd="true"
        android:layout_marginEnd="198dp" />
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true" />


</LinearLayout>

FormActivity.java (YOUR ACTIVITY B)

package bogo.com.additemtolistview;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class FormActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_form);

        Button button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                EditText editText = (EditText) findViewById(R.id.editText);
                String newitem = editText.getText().toString();

                Intent intent = new Intent("ITEM_ADDED");
                intent.putExtra("newitem",newitem);
                sendBroadcast(intent);
                finish();
            }
        });

    }
}

activity_form.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="bogo.com.additemtolistview.FormActivity">

    <EditText
        android:layout_width="220dp"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="78dp"
        android:layout_marginTop="60dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_alignStart="@+id/editText" />
</RelativeLayout>

listviewrow.xml

    <?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">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="48dp">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:textColor="@android:color/black"
            android:id="@+id/textView" />
    </LinearLayout>

</LinearLayout>

这篇关于Android中的ListView刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆