我有两个类,第一个用于GUI,我在其中声明了listview和适配器,以及setter,从我的第二个类中调用它们。
public class AndroidGUIModifier implements IMyComponentGUIModifier, IFragmentEvents {
private transient ListView lv;
List<String> mydeviceslist;
ArrayAdapter<String> adapter ;
public void setAdapter(ArrayAdapter<String> adapter) {
this.adapter = adapter;
adapter.notifyDataSetChanged();
}
public void setMydeviceslist(List<String> mydeviceslist) {
this.mydeviceslist = mydeviceslist;
}
@Override
public void onCreateView() {
lv=(ListView) fragment.findViewById("xdevices") ;
mydeviceslist = new ArrayList<String>();
adapter = new ArrayAdapter<String>(fragment.getContext(),android.R.layout.simple_list_item_1,mydeviceslist);
lv.setAdapter(adapter);
在我的第二课中,我将等待一个事件来接收我想在列表视图中加载它的列表,然后我将调用列表设置器来设置新接收的列表和适配器设置器来更新它,但是虽然我收到了日志中的设备列表,但它没有显示任何内容。
public class triprincipal extends BCModel {
public List<String> mydevices ;
BCEvent bcEvent;
final ArrayAdapter<String> adapter =guiModifier.getAdapter();
while (isRunning()) {
bcEvent = waitForBCEvent();
if (bcEvent.getID() == checkevent) {
mydevices = bcCommandSenderPlugin.getDevicesNames(); // here I get a list of my devices
Log.i("devices", mydevices.toString());
guiModifier.getFragment().getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
guiModifier.setMydeviceslist(mydevices);
guiModifier.setAdapter(adapter);
}
} );
答案 0 :(得分:1)
Convert.ToDecimal()
在这种情况下不起作用,因为您传递给适配器的引用值实际上并没有改变。
您需要创建一个新的adapter.notifyDataSetChanged()
并将其设置为Adapter
才能使其正常运行。将您的ListView
更改为此:
setAdapter()
答案 1 :(得分:1)
在 setMydeviceslist()中,请执行以下操作:
this.mydeviceslist.addAll(mydeviceslist);
adapter.notifyDataSetChanged();
希望它会帮助你。
答案 2 :(得分:0)
尝试更新相同片段/活动中的列表,并在更新后调用notifyDataSetChanged(),同时在同一个活动/片段....不要在列表上设置适配器......希望有所帮助