Vic*_*c V 5 android listview android-arrayadapter
我有一个问题应该很简单,但我似乎无法解决它.
我正在使用DragSortListView.我想给每个listview-item一个带有原始位置的标签.当用户完成重新排序时,我想返回一个带有原始id的字符串(例如2,3,4,1,如果用户将第一个项目移动到最后一个位置).如果项目被删除,我也想知道原始ID.
这是我的代码.
DragSortListView mainListView = (DragSortListView) findViewById( R.id.list_pages );
String[] names = settings.getString("pages", "Error,error").split(",");
ArrayList<String> list = new ArrayList<String>(Arrays.asList(names));
adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.row, list);
mainListView.setAdapter(adapter);
DragSortController controller = new DragSortController(mainListView);
...
Run Code Online (Sandbox Code Playgroud)
现在我认为最好循环遍历所有项目并给它们带有原始id的标签.我正在尝试使用类似的东西遍历项目
for (int i = 0; i < mainListView.getCount(); i++)
{
View v = mainListView.getChildAt(i);
TextView tx = (TextView) v.findViewById(R.id.text);
tx.setTag(i);
}
Run Code Online (Sandbox Code Playgroud)
但是,即使已设置适配器,此列表视图也显示为空.
我无法使用自定义ArrayAdapter,因为当项目被删除或刷掉时,应用程序将崩溃.
附加信息: 当服务使用BroadcastReceiver返回数据时,将填充列表视图.我不认为这会影响这一点,但你永远不会知道.
我的问题:
提前致谢!
如果您不想使用自定义Adapter,那么您可以这样做:
List<Item> dataForTheAdapter = new ArrayList<Item>();
// 'dataRetrivedfromService' is the data, that gets returned by the service
for (int counter = 0; counter < dataRetrivedfromService.size(); counter++) {
dataForTheAdapter.add(new Item(dataRetrivedfromService.get(counter), counter));
}
mContext = MyActivity.this;
mAdapter = new ArrayAdapter<Item>(mContext, R.layout.row, dataForTheAdapter);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)
这段代码非常自我解释.现在看一下Item.java类,你会看到我覆盖了这个toString()方法.toString()在ListView想要填充其数据的提供对象上调用该方法.
public class Item {
private String mText;
private int mPosition;
public Item(String text, int position) {
this.mText = text;
this.mPosition = position;
}
public int getPosition() {
return mPosition;
}
public void setPosition(int position) {
this.mPosition = position;
}
public String getText() {
return mText;
}
public void setText(String text) {
this.mText = text;
}
@Override
public String toString() {
return this.mText;
}
}
Run Code Online (Sandbox Code Playgroud)
现在您不必编写自定义适配器,但可以使用Item的对象填充ListView.
为了验证这一点,如果一切正常,你可以设置OnItemClickListener你的ListView和做到这一点:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(mContext, String.valueOf(mAdapter.getItem(position).getPosition()), Toast.LENGTH_SHORT).show();
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3207 次 |
| 最近记录: |