私は、ユーザが動的に設定できるarrayadapterを持つリストビュー付きのアプリケーションを作成しました。私は設定にjson文字列として入力された情報を格納し、私はアプリを更新するとき、私はエントリを持つリストを取得します。ネットワーク操作後に各エントリの横のイメージを変更する必要があります。私が直面している問題は、リスト内の要素が動的に追加されているため、onPostExecute()メソッドでイメージビューを更新するのも良い方法も見つからないようです。それらは同じレイアウトIDを共有します。ここでAndroid上の動的リストの画像を動的に変更する
は私のアダプター内部の私のgetViewメソッド()メソッドである:ここでは
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.product_list_item, null);
holder = new ViewHolder();
holder.deviceName = (TextView) convertView
.findViewById(R.id.txt_pc_name);
holder.deviceIp = (TextView) convertView
.findViewById(R.id.txt_pdt_desc);
holder.devicePort = (TextView) convertView
.findViewById(R.id.txt_pdt_price);
holder.favoriteImg = (ImageView) convertView
.findViewById(R.id.imgbtn_favorite);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Devices device = (Devices) getItem(position);
holder.deviceName.setText(device.getName());
holder.deviceIp.setText(device.getIpOnline());
holder.devicePort.setText(device.getPortOnline() + "");
return convertView;
}
は私のAsyncTaskです:
public class Connection extends AsyncTask<String, Void, String> {
private String ipOnline;
private int portOnline;
private String ipWol;
private int portWol;
private String macAddress;
private ImageView img;
private Context context;
public interface AsyncResponse {
void processFinish(String output);
}
public AsyncResponse delegate = null;
public Connection(Context mContext, ImageView Img,String IpOnline, int PortOnline, String IpWol, int PortWol, String MacAddress, AsyncResponse delegate) {
ipOnline = IpOnline;
portOnline = PortOnline;
ipWol = IpWol;
portWol = PortWol;
macAddress = MacAddress;
context = mContext;
// inflate = Inflate;
img = Img;
// spin = spinner;
this.delegate = delegate;
}
public int status;
@Override
protected String doInBackground(String... arg0) {PreferenceManager.getDefaultSharedPreferences(lastContext);
try {
Socket echoSocket = new Socket();
echoSocket.connect(new InetSocketAddress(ipOnline,portOnline),2000);
if(echoSocket.isConnected())
status = 1;
} catch (Exception e) {
status = 0;
}
if(status == 0)
return "0";
else
return "1";
}
@Override
protected void onProgressUpdate(Void... values) {}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
ImageView img = (ImageView) activity.findViewById(R.id.imgbtn_favorite);
if (status == 0)
img.setImageResource(android.R.drawable.presence_offline);
else
img.setImageResource(android.R.drawable.presence_online);
delegate.processFinish(result);
}
}
そして、ここではそれに私の呼び出しです:
new Connection(activity, img, product.getIpOnline(), Integer.parseInt(product.getPortOnline()), product.getIpWol(), Integer.parseInt(product.getPortWol()), product.getMacAddress(), new Connection.AsyncResponse() {
@Override
public void processFinish(String output) {
}
}).execute();
あなたの答えをありがとう。私はすでにビューホルダーのパターンを実装していましたが、問題は、ネットワーク操作を実行するためにAsyncクラスを呼び出すときに、getViewは常に呼び出しを続け、画像を更新するまでに時間がかかることです。何か間違っているのですか?私はgetViewメソッドをアタッチしました。 – m33ts4k0z
非同期タスクとその呼び出しのコードスニペットを投稿してください – Alok
私は関連するすべてのコードで質問を更新しました – m33ts4k0z