gpt4 book ai didi

android - 通过更改自定义 ListView 中的数据集值,仅更新最后一行

转载 作者:行者123 更新时间:2023-11-29 02:10:28 27 4
gpt4 key购买 nike

在上面的代码中,我尝试使用 simpleadapter 更新 customListview 中的 Imageresource,问题是每当我 Notifychngedataset() 它只更新最后一行

                    public class HelloWorldActivity extends Activity {
private ArrayList <HashMap<String, Object>> my;
ArrayList<String> ImageList;


/** Variable Declaration For Items Parsed from TwiterJson*/

private final String TEXT="text";
private final String USER="user";
private final String IMAGEURL="imageurl";
private final String URL="url";
private ListView listView;
ArrayList<String> textItems;
ArrayList<String> userlist;
ArrayList<String> urllist;
HashMap<String, Object> hm;
String line;
private String TAG="HelloWorldActivity";
private ProgressBar mProgressBar;
View view;

Simpleadapter adapter;



@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView)findViewById(R.id.list);

mProgressBar=(ProgressBar)findViewById(R.id.progressbar);

// Call the Asynch Activity
new AsynchTask().execute();

}

/** SimpleAdapater Class Definition*/
public class Simpleadapter extends SimpleAdapter {


public Simpleadapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);

}
@Override
public View getView(int position, View convertView, ViewGroup parent) {


view = super.getView(position, convertView, parent);

final Button mButton=(Button)view.findViewById(R.id.gobutton);
final ImageView mImageview=(ImageView) view.findViewById(R.id.image1);
mImageview.setImageBitmap((Bitmap) my.get(position).get(IMAGEURL));

final int num=position;

mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse((String) my.get(num).get(URL))));

}
});
return view;
}


}


/**Inner Class for Background Task*/

private class AsynchTask extends AsyncTask<Void, Integer, Void> {
URLConnection tc;
BufferedReader in;
URL twitter;
int num=0;

@Override
protected void onPreExecute() {
super.onPreExecute();
try {

mProgressBar.setVisibility(View.VISIBLE);
} catch (Exception e) {
Log.e(TAG,""+e.getMessage());
}
}
@Override
protected Void doInBackground(Void... params) {
try{
twitter = new URL("http://twitter.com/statuses/public_timeline.json");
tc = twitter.openConnection();
my = new ArrayList<HashMap<String,Object>>();
ImageList=new ArrayList<String>();
in = new BufferedReader(new InputStreamReader(
tc.getInputStream()));

while ((line = in.readLine()) != null) {

JSONArray ja = new JSONArray(line);
Log.e("Length",""+ja.length());
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
/**Data Insert into the HashMap Object*/
hm=new HashMap<String, Object>();
hm.put(TEXT,jo.getString("text"));
hm.put(USER,jo.getJSONObject("user").getString("name"));

hm.put(URL,"http://twitter.com/#!/"+jo.getJSONObject("user").getString("screen_name"));
hm.put(IMAGEURL, BitmapFactory.decodeResource(HelloWorldActivity.this.getResources(), R.drawable.icon));

ImageList.add(jo.getJSONObject("user").getString("profile_image_url"));
my.add(hm);



}

}
} catch (Exception e) {

e.printStackTrace();
}
return null;
}

@Override
protected void onProgressUpdate(Integer... values) {

super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
mProgressBar.setProgress(0);
mProgressBar.setVisibility(View.GONE);
adapter= new Simpleadapter(HelloWorldActivity.this, my, R.layout.listcontent,
new String[]{TEXT,USER}, new int[]{R.id.text2,R.id.text1});
listView.setAdapter(adapter);

new AsynchTaskForImageLoading().execute();
}
}


/**Method to convert Url to the Bitmap*/


private Bitmap getDrawable_from_url(String url) {


try{
Bitmap x;
HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
connection.setRequestProperty("User-agent","Mozilla/4.0");
connection.connect();
InputStream input = connection.getInputStream();
x = BitmapFactory.decodeStream(input);

return x;
}
catch (Exception e) {
Log.e(TAG,""+e.getMessage());
return null;
}

}
private class AsynchTaskForImageLoading extends AsyncTask<Void, Bitmap,Void>
{


@Override
protected void onPreExecute() {

super.onPreExecute();
}


@Override
protected Void doInBackground(Void... params) {
for(int i=0;i<ImageList.size();i++){

publishProgress(getDrawable_from_url(ImageList.get(i)));

}

return null;
}
@Override
protected void onProgressUpdate(Bitmap... values) {
super.onProgressUpdate(values);
for (Bitmap value : values) {
hm.put(IMAGEURL,value);
adapter.notifyDataSetChanged();

}


}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);


}



}

` }//主要 Activity 类结束

我想更新每一行的 Imageview 但不知何故它只更新我的 Listview 的最后一行递归我可以更改经常更改最后一行的图像...

感谢 Adnavce

最佳答案

你的 onProgressUpdate() 中需要一个循环:

protected void onProgressUpdate(Bitmap... values) {
for (Bitmap value : values) {
hm.put(IMAGEURL,value);
adapter.notifyDataSetChanged();
}
}

关于android - 通过更改自定义 ListView 中的数据集值,仅更新最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7755142/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com