在android studio中更新列表视图

在android studio中更新列表视图,android,listview,notifydatasetchanged,Android,Listview,Notifydatasetchanged,我正在android studio中创建一个应用程序 我需要用通过短信发送的新url更新列表视图 如何将新url添加到列表中 这是我目前的主代码 public class MainActivity extends AppCompatActivity { ListView list; WebView webView; ArrayList<String> sites = new ArrayList<> ("https://www.google.com", "https:

我正在android studio中创建一个应用程序

我需要用通过短信发送的新url更新列表视图

如何将新url添加到列表中

这是我目前的主代码

 public class MainActivity extends AppCompatActivity {

 ListView list;
WebView webView;
ArrayList<String> sites = new ArrayList<> ("https://www.google.com", "https://www.yahoo.com", "https://www.apple.com");
String [] url = {"https://www.google.com", "https://www.yahoo.com", "https://www.apple.com"};

MyBroadcastReceiver receiver;


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



    list = (ListView)findViewById(R.id.listview);
    MyListAdapter adapter = new MyListAdapter(this, sites);
    sites.add("new site");
    adapter.notifyDataSetChanged();
    list.setAdapter(adapter);
    list.setDividerHeight(5);
    webView = (WebView)findViewById(R.id.webview);
    webView.setWebViewClient(new WebViewClient(){});

    list.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id){
            Toast.makeText(getApplicationContext(),sites[position], Toast.LENGTH_SHORT).show();
            webView.loadUrl("https://www.google.com");
            webView.loadUrl(url[position]);

        }
    });

    receiver = new MyBroadcastReceiver();
    IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
    registerReceiver(receiver,filter);
}


} 
public类MainActivity扩展了AppCompatActivity{
列表视图列表;
网络视图;
ArrayList站点=新建ArrayList(“https://www.google.com", "https://www.yahoo.com", "https://www.apple.com");
字符串[]url={”https://www.google.com", "https://www.yahoo.com", "https://www.apple.com"};
我的广播接收机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list=(ListView)findViewById(R.id.ListView);
MyListAdapter=新的MyListAdapter(此,站点);
地点。添加(“新地点”);
adapter.notifyDataSetChanged();
list.setAdapter(适配器);
列表。setDividerHeight(5);
webView=(webView)findviewbyd(R.id.webView);
setWebViewClient(新的WebViewClient(){});
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){
Toast.makeText(getApplicationContext(),sites[position],Toast.LENGTH\u SHORT.show();
webView.loadUrl(“https://www.google.com");
loadUrl(url[position]);
}
});
receiver=新的MyBroadcastReceiver();
IntentFilter过滤器=新的IntentFilter(Intent.ACTION\u飞机\u模式\u已更改);
寄存器接收器(接收器、过滤器);
}
} 
MyListAdapter:

public class MyListAdapter extends ArrayAdapter<String> {
private Activity context_;
private ArrayList<String> sites;

//constructor
public MyListAdapter(Activity context, ArrayList<String> sites){
    super(context,R.layout.row,sites);
    context_ = context;
    this.sites = sites;
}

public View getView (int position, View convertView, ViewGroup parent){
    if(convertView == null){
        LayoutInflater inflater = context_.getLayoutInflater();
        convertView = inflater.inflate(R.layout.row,null);
    }

    ViewHolder holder = (ViewHolder) convertView.getTag();

    if(holder == null){
        holder = new ViewHolder(convertView);
        holder.tv_link.setText(sites.get(position));
    }
    else{
        holder.tv_link.setText(sites.get(position));
    }
    return convertView;
}

private class ViewHolder{
    TextView tv_link;
    public ViewHolder(View row){
        tv_link = (TextView) row.findViewById(R.id.tv_link);
    }
}
公共类MyListAdapter扩展了ArrayAdapter{
私人活动背景;
私人ArrayList站点;
//建造师
公共MyListAdapter(活动上下文、ArrayList站点){
超级(上下文、右布局、行、站点);
上下文=上下文;
本网站=网站;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
LayoutInflater充气器=上下文_u2;.getLayoutInflater();
convertView=充气机充气(右布局行,空);
}
ViewHolder=(ViewHolder)convertView.getTag();
if(holder==null){
支架=新的视图支架(convertView);
holder.tv_link.setText(sites.get(position));
}
否则{
holder.tv_link.setText(sites.get(position));
}
返回视图;
}
私有类视窗持有者{
TextView电视链接;
公共视图持有者(视图行){
tv_link=(TextView)row.findViewById(R.id.tv_link);
}
}

}

尝试使用ArrayList,然后在需要在该ArrayList中添加新URL时添加。然后调用adapter.notifyDataSetChanged()


如果您知道可能需要更新值,请不要使用final

尝试使用ArrayList,然后在需要在该ArrayList中添加新URL时添加。然后调用adapter.notifyDataSetChanged()

如果您知道可能需要将您定义的站点

的值更新为final,则不要使用final。您也不能将其更新为String[]而使用String的arraylist:

  ArrayList<String> sites = new ArrayList<>();
在适配器的构造函数中,如果您这样做:

  public class MyListAdapter extends ArrayAdapter<String> {

    private Context context;
    private ArrayList<String> array;

    public MyListAdapter(Context ctx, ArrayList<String> mArray) {
        super(ctx, 0, mArray);
        this.context = ctx;
        this.array = mArray; 
    }

    //other methods
}
并在收到新数据时调用适配器方法

 sites.add("new site ");
    adapter.newDataReceived(sites); 
代码是手动输入的,可能有错误的语法,我希望它能帮助您

站点定义为最终版本,您也不能更新它,而不是字符串[]使用字符串的arraylist:

  ArrayList<String> sites = new ArrayList<>();
在适配器的构造函数中,如果您这样做:

  public class MyListAdapter extends ArrayAdapter<String> {

    private Context context;
    private ArrayList<String> array;

    public MyListAdapter(Context ctx, ArrayList<String> mArray) {
        super(ctx, 0, mArray);
        this.context = ctx;
        this.array = mArray; 
    }

    //other methods
}
并在收到新数据时调用适配器方法

 sites.add("new site ");
    adapter.newDataReceived(sites); 

代码是手动输入的,可能有错误的语法,我希望它能帮助您

您应该发布MyListAdapter类的代码,但基本上您需要做的是向适配器添加一个方法,将新元素插入其站点列表,然后使用NOTIFYDATASETCHANGE更新视图。可能与我添加的代码重复,我需要编辑其中的任何内容吗?如果是这样,我该怎么做?你应该发布MyListAdapter类的代码,但基本上你需要做的是向适配器添加一个方法,将新元素插入其站点列表,然后使用notifyDataSetChanged更新视图。我添加的代码可能重复,我需要编辑其中的任何内容吗?如果是这样,我该怎么做?它说不能推断参数,不能解析此行中的构造函数:ArrayList sites=new ArrayList(“,”,”);@S.Hobbs去掉所有的分号,但最后一个分号这里实际上不是我应用程序中的分号,我不知道它们为什么会出现。@drawinfinity我也在上面的问题中添加了我的适配器列表,因为我不确定如何将我的适配器列表编辑到你所写的内容中。你能解释一下吗?你必须在onCreate:sites中逐个输入地址。加入(“);或者类似这样:sites=newarraylist(Arrays.asList(“,”,”));它表示无法推断参数,无法解析此行中的构造函数:ArrayList sites=new ArrayList(“,”,”)@S.Hobbs去掉了所有这些分号,但最后一个分号在我的应用程序中实际上不是分号,我不确定它们为什么会出现。@drawinfinity我还将我的适配器列表添加到上面的问题中,因为我不确定如何将我的适配器列表编辑为您所写的内容。您能解释一下吗?您必须在onCreate:sites.add(“)中逐个输入地址,或者像这样:sites=newarrayList(Arrays.asList(“,”,”);