在android studio中更新列表视图
我正在android studio中创建一个应用程序 我需要用通过短信发送的新url更新列表视图 如何将新url添加到列表中 这是我目前的主代码在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:
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(“,”,”);