我已经实现了垂直滚动的列表视图,每行中都有像apple,lemon等项目,这些项目是水平滚动的。现在我的问题是我需要对所选行中的项进行排序,我需要将结果更新到该行,这里我无法将值更新到特定行。第一次我将数据从活动加载到适配器和排序值我正在加载适配器类。
这里的代码是..
public static ArrayList<GroupsModel> CustomListViewValuesArr;
public static ArrayList<ItemsModel> ItemsArr;
public MyDisplay_Adapter(Context a, ArrayList d) {
context = a;
data = d;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
if (data.size() <= 0)
return 1;
return data.size();
}
public final Object getItem(int position) {
return data.get(position);
}
public final long getItemId(int position) {
return position;
}
public static class ViewHolder {
public TextView tvGroupTitle, tvGroupDescription,
public LinearLayout imgscrollchild;
}
public View getView(final int position, View convertView, ViewGroup parent) {
Log.d("getview:", "position=" + position);
vi = convertView;
final ViewHolder holder;
if (convertView == null) {
vi = inflater.inflate(R.layout.my_asset_list_item, null);
holder = new ViewHolder();
holder.tvGroupTitle = (TextView) vi.findViewById(R.id.tvGroupTitle);
holder.tvGroupDescription = (TextView) vi
.findViewById(R.id.tvGroupDescription);
holder.imgscrollchild = (LinearLayout) vi
.findViewById(R.id.imgscrollchild);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
if (data.size() <= 0) {
vi.setVisibility(View.GONE);
} else {
tempValues = null;
tempValues = (GroupsModel) data.get(position);
holder.tvGroupTitle.setText(tempValues.getName().toString());
holder.tvGroupDescription.setText(tempValues.getDescription()
.toString());
if (tempValues.getItemmodel().size() == 0) {
return vi;
} else {
for (int i = 0; i < tempValues.getItemmodel().size(); i++) {
a = i;
Log.i("Index", String.valueOf(i));
holder.imgscrollchild.addView(createimg(
tempValues.getItemmodel(), a));
Log.i("Index A", String.valueOf(a));
}
}
}
return vi;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public View createimg(final List<ItemsModel> bm, final int pos) {
Here dynamically creating a imageview and textview
return Hlayout;
}
private class Sort extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String json = null;
try {
String url_get = "my url"
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url_get);
HttpResponse response = httpclient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
json = EntityUtils.toString(entity);
try {
JSONArray array = new JSONArray(json);
ItemsArr = new ArrayList<ItemsModel>();
for (int i = 0; i < array.length(); i++) {
JSONObject Obj = array.getJSONObject(i);
String GName = Obj.getString("GName");
String GDesc = Obj.getString("GDesc");
ItemsArr.add(ItemsList);
}
GroupsModel list1 = new GroupsModel();
list1.setItemmodel(ItemsArr);
CustomListViewValuesArr = new ArrayList<GroupsModel>();
CustomListViewValuesArr.add(list1);
} catch (Exception e) {
e.printStackTrace();
Log.e("Exception", e.toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
adapter = new MyDisplay_Adapter(context,CustomListViewValuesArr);
adapter.notifyDataSetChanged();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:2)
您不应该在异步任务的postExecute上创建新的适配器实例。你sholud创建一个方法来改变适配器上的数据。并在PostExecute上调用它,如:
adapter.setData(myData);
adaptar.notifyDatasetChanged();
如果您不想这样做,如果您需要重新创建适配器,则应将其重置为:
listView.setAdapter(adapter);
注意:代码示例可能与确切代码不同。
答案 1 :(得分:0)
将更新的对象更新为arraylist 您可以通过清除arraylist中的所有数据并将更新的数据添加到同一列表中来完成此操作 您可以通过检查要替换的对象来执行此操作 并使用 adapter.notifyDataSetChanged();