gpt4 book ai didi

android - 在 android listview 适配器文件中更改 imageview

转载 作者:行者123 更新时间:2023-11-29 01:39:01 25 4
gpt4 key购买 nike

我试图在 android listview 中更改 ImageView 。如果我从列表中选择任何项目行。那里有 2 个图像。它们是参加,未参加。

默认项目状态为参加。如果用户点击参加图像,功能完成后需要将参加图像更改为取消参加。

如果用户点击未出席图像,功能将完成,然后需要将未出席图像更改为出席图像。

我有以下代码。该功能运行良好。但图像在运行时没有改变。请检查代码并给我一个解决方案。

 public class Today_List_Adapter extends BaseAdapter {

private Activity activity;
static ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
AlertDialog.Builder alertDialog;
public ImageLoader imageLoader;
String success,error;
JSONParser jsonParser = new JSONParser();
public Today_List_Adapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return data.size();

}

public Object getItem(int position) {
return position;
}

public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.listof_today, null);

TextView cartitle = (TextView)vi.findViewById(R.id.today_producttitle);
ImageView carimage = (ImageView)vi.findViewById(R.id.today_productimage);
TextView cardate = (TextView)vi.findViewById(R.id.today_productdate);
TextView cartime = (TextView)vi.findViewById(R.id.today_producttime);
TextView carddesc = (TextView)vi.findViewById(R.id.today_productdesc);
final ImageView cardetails = (ImageView)vi.findViewById(R.id.today_productimage_detail);
ImageView carcheckin = (ImageView)vi.findViewById(R.id.today_productimage_attend);
HashMap<String, String> Order = new HashMap<String, String>();
Order = data.get(position);
cartitle.setText(Order.get(TodayList.TAG_CAR_TITLE));
cardate.setText(Order.get(TodayList.TAG_CAR_SDATE)+" "+"-"+" "+Order.get(TodayList.TAG_CAR_EDATE));
cartime.setText(Order.get(TodayList.TAG_CAR_TIME));
carddesc.setText(Order.get(TodayList.TAG_CAR_DESC));
imageLoader=new ImageLoader(activity.getApplicationContext());
imageLoader.DisplayImage(Order.get(TodayList.TAG_CAR_IMAGE), carimage);
final String carid = Order.get(TodayList.TAG_CAR_ID);
final String shareurl = Order.get(TodayList.TAG_CAR_EURL);
final String plantoattend = Order.get(TodayList.TAG_CAR_STATUS);
if ((!(LoginForm.GoogleId.equalsIgnoreCase("No user found")))
|| (!(LoginForm.FacebookId.equalsIgnoreCase("No user found")))
|| (!(CommonUtils.login_status
.equalsIgnoreCase("No user found")))) {
if(plantoattend.equalsIgnoreCase("N")){
cardetails.setImageResource(R.drawable.attend);
}
else {
cardetails.setImageResource(R.drawable.unattend);
}
}
else {
cardetails.setImageResource(R.drawable.attend);
}
cardetails.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

if(plantoattend.equalsIgnoreCase("N")){
alertDialog = new AlertDialog.Builder(activity);
alertDialog.setMessage("You're going! Do you want to share the meet?");
alertDialog.setPositiveButton("Share", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, shareurl);
sendIntent.setType("text/plain");
cardetails.setImageResource(R.drawable.unattend);
activity.startActivityForResult(Intent.createChooser(sendIntent, "Share via"),1000);
}
});
alertDialog.setNegativeButton("Not now", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
cardetails.setImageResource(R.drawable.unattend);
new AttendMeet().execute(carid);

}
});
alertDialog.show();
}
else{
if (cd.isConnectingToInternet()) {
new UnAttendMeet().execute(carid);
cardetails.setImageResource(R.drawable.attend);
//Today_List_Adapter.this.notifyDataSetChanged();
}
else {
alert.showAlertDialog(activity, "Internet Connection Error",
"Please Try Again Later", false);
return;
}
}
}
}
});
carcheckin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, shareurl);
sendIntent.setType("text/plain");
activity.startActivity(sendIntent);
}
});
return vi;

}
public void onActivityResult(int requestCode, int resultCode, Intent data,String... args) {
//super.onActivityResult(requestCode, resultCode, data);

switch(requestCode) {
case 1000:
Today_List_Adapter.this.notifyDataSetChanged();
break;

}

}

class AttendMeet extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}

protected String doInBackground(String... args) {
try {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_id", CommonUtils.login_status));
params.add(new BasicNameValuePair("event_id", args[0]));
JSONObject json = jsonParser.makeHttpRequest(url_attendmeet,
"POST", params);
Log.d("Attend Meet", json.toString());
success = json.getString("status");
if (success.equalsIgnoreCase("ok")) {
}
else
{
error = json.getString("error");
}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

protected void onPostExecute(String file_url) {
if (success.equalsIgnoreCase("ok")) {

cardetails.setImageResource(R.drawable.unattend);

Toast.makeText(activity.getApplicationContext(),
"The meet was successfully added on attending meet", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(activity.getApplicationContext(),
error, Toast.LENGTH_LONG).show();
}

}

}
class UnAttendMeet extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}

protected String doInBackground(String... args) {
try {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_id", CommonUtils.login_status));
params.add(new BasicNameValuePair("event_id", args[0]));
JSONObject json = jsonParser.makeHttpRequest(url_unattendmeet,
"POST", params);
Log.d("UnAttend Meet", json.toString());
success = json.getString("status");
if (success.equalsIgnoreCase("ok")) {

}
else
{
error = json.getString("error");
}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

protected void onPostExecute(String file_url) {
if (success.equalsIgnoreCase("ok")) {
cardetails.setImageResource(R.drawable.attend);

Toast.makeText(activity,
"The meet was successfully removed from attending meet", Toast.LENGTH_LONG).show();
}
else
{

Toast.makeText(activity,
error, Toast.LENGTH_LONG).show();
}

}
}

}

编辑:

我已经更新了我的代码。

现在我已经运行了应用程序。得到的结果如下:

如果用户点击参加图像,功能将完成,然后图像从参加图像更改为未参加图像。但是我再次单击未参加图像。,需要调用 UnAttned 类.但它只调用Attend class。你能检查我的代码并给我一个解决方案吗?

最佳答案

基础数据也需要更改,以防 View 因某种原因被重新填充(例如调用 notifyDataSetChanged(),滚出 View 等)。更改它以解决眼前的问题(订单需要是最终的):

...
cardetails.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

if (plantoattend.equalsIgnoreCase("N")) {
alertDialog = new AlertDialog.Builder(activity);
alertDialog.setMessage("You're going! Do you want to share the meet?");
alertDialog.setPositiveButton("Share", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, shareurl);
sendIntent.setType("text/plain");
cardetails.setImageResource(R.drawable.unattend);
activity.startActivityForResult(Intent.createChooser(sendIntent, "Share via"), 1000);
}
});
alertDialog.setNegativeButton("Not now", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Order.put(TodayList.TAG_CAR_STATUS, "Y"); // CHANGE THE UNDERLYING DATA HERE
cardetails.setImageResource(R.drawable.unattend);
new AttendMeet().execute(carid);

}
});
alertDialog.show();
} else {
if (cd.isConnectingToInternet()) {
new UnAttendMeet().execute(carid);
Order.put(TodayList.TAG_CAR_STATUS, "N"); // CHANGE THE UNDERLYING DATA HERE
cardetails.setImageResource(R.drawable.attend);
//Today_List_Adapter.this.notifyDataSetChanged();
} else {
alert.showAlertDialog(activity, "Internet Connection Error",
"Please Try Again Later", false);
return;
}
}
}
});
...

但是,我不想留下这个答案,因为我知道您会遇到更多问题:

  1. 您不应该像在 onPostExecute 中那样直接操作 ImageView。当您的 AsyncTask 完成时,该 View 可能已被回收并填充了其他数据。相反,更改基础数据并在必要时调用 notifiedDataSetChanged。
  2. AsyncTask,不保留对(多个!)AsyncTasks 的引用意味着,当用户提前离开 Activity/fragment 时,您将无法取消它们。这意味着任何触摸 UI 的东西都会使应用程序崩溃。虽然绝对可以使用 AsyncTasks 执行 REST 请求,但如果您执行的请求不只少数,它会很痛苦并且很快就会变得复杂。查看 Retrofit 或 Volley 等库。
  3. 使用 findViewById 查找 View 很慢并且会导致滚动延迟,请尝试 ViewHolder 模式。
  4. 像您那样在 Map 中存储数据“有点”有效,但是非常不符合 Java 风格,您必须在代码中添加空检查,否则会冒空指针异常的风险。改为使用 POJO
  5. 遵守命名约定,让您自己和其他人更容易阅读您的代码。

我没有查找这些要点的链接,但如果需要我会添加它们。

关于android - 在 android listview 适配器文件中更改 imageview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25975787/

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