0

В настоящее время я разбираю данные с веб-сервера «A» в Listview с помощью Lazy Adapter. Каждая строка имеет кнопку, которая при выборе отправляет данные в этой строке на веб-сервер «B» с использованием отдельного класса AsyncTask. Я использую обратный вызов в asynctask с onTaskComplete для обновления активности. Что работает очень хорошо, я получаю правильный ответ от сервера.Обновление представления кнопки после async task listview

Вопрос: как обновить изображение кнопки в зависимости от ответа сервера. Например, если ответ с сервера равен 1, обновите изображение кнопки иначе, если ответ равен 0, не измените изображение кнопки. Я просто не знаю, как передать ответ от активности на адаптер, чтобы обновить изображение кнопки. Любой совет будет принят во внимание.

МОЙ КОД:

адаптер:

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    RowHolder holder = null; 
    if (convertView == null) { 
     vi = inflater.inflate(R.layout.group_view, null); 
     holder = new RowHolder(); 
     holder.a_refid = (TextView) vi.findViewById(R.id.a_refid); 
     holder.a_a_name = (TextView) vi.findViewById(R.id.a_name); 
     holder.a_location = (TextView) vi.findViewById(R.id.a_location); 
     holder.checkin = (ImageView) vi.findViewById(R.id.a_checkin); 
     vi.setTag(holder); 
    } else { 
     holder = (RowHolder) vi.getTag(); 
    } 

    HashMap<String, String> locList; 
    locList = data.get(position); 
    holder.a_refid.setText(locList.get(MainActivity.KEY_REFID)); 
    holder.a_name.setText(locList.get(MainActivity.KEY_NAME)); 
    holder.a_location.setText(locList.get(MainActivity.KEY_LOCATION));   

    HashMap<String, String> details = dbh.getUserDetails(); 
    final String useruid = details.get("uid"); 
    Log.d("UID", useruid); 

    final HashMap<String, String> finallocList = locList; 
    holder.a_refid.setTag(finallocList.get(MainActivity.KEY_REFID)); 
    holder.a_name.setTag(finallocList.get(MainActivity.KEY_REFID)); 
    holder.a_location.setTag(finallocList.get(MainActivity.KEY_REFID)); 

    //Check In Button 
    holder.checkin.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(activity); 
      builder.setTitle("Check-in to: " + finallocList.get(MainActivity.KEY_NAME)); 
      builder.setItems(new CharSequence[]{"Check-In", "Anonymous Check-In", 
      "Cancel"}, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          // The 'which' argument contains the index position 
          // of the selected item 
          switch (which) { 
           case 0: 
            new  
     AcheckPro(activity).execute(finallocList.get(MainActivity.KEY_REFID), useruid, 
     finallocList.get(MainActivity.KEY_NAME), 
     finallocList.get(MainActivity.KEY_NAME)); 
            Log.d("Check In Process", String.valueOf(useruid)); 
            break; 
           case 1: 
            Toast.makeText(activity, "button 2 clicked", 
            Toast.LENGTH_SHORT).show(); 
            break; 
           case 2: 
            Toast.makeText(activity, "button 3 clicked", 
            Toast.LENGTH_SHORT).show(); 
            break; 
          } 
         } 
        }); 
      builder.create().show(); 
     } 
    }); 

    return vi; 
} 

AsyncTask Класс

public class AcheckPro extends AsyncTask<String, Void, JSONObject> { 

private Activity activity; 
private ProgressDialog dialog; 
private AsyncTaskCompleteListener callback; 

public AcheckPro(Activity act) { 
    this.activity = act; 
    this.callback = (AsyncTaskCompleteListener)act; 
} 

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

    dialog = new ProgressDialog(activity); 
    dialog.setMessage("Loading..."); 
    dialog.show(); 
} 

@Override 
protected JSONObject doInBackground(String... params) { 

    String refid = params[0]; 
    String uid = params[1]; 
    String name = params[2]; 
    String location = params[3];   

    JFunctions jFunctions = new JFunctions(); 
    JSONObject json = userFunction.checkInUser(refid, uid, name, location); 
    return json; 


} 

@Override 
protected void onPostExecute(JSONObject json) { 
    super.onPostExecute(json); 
    if (null != dialog && dialog.isShowing()) { 
     dialog.dismiss(); 
    } 
    Log.d("JSON Object", String.valueOf(json)); 
    callback.onTaskComplete(json); 

} 
} 
+0

Можете ли вы поделиться кодом, который вы написали, когда получаете данные с сервера? – PsyGik

+0

@Carbongixxer Поделитесь своим кодом ... чтобы мы могли вам помочь – nitesh

+0

@PsyGik Добавлено мой код – Carbongixxer

ответ

0

Вы можете сделать это просто по этой логике

public class MainActivity extends Activity implements OnClickListener{ 
Button myButton; 
boolean flag = false; 
RelativeLayout rl; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     rl = (RelativeLayout) findViewById(R.id.relative); 

     RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) new LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 
     myButton = new Button(this); 
     myButton.setOnClickListener(this); 

     if(flag){ 
      myButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.record_button_pressed)); 
     }else{ 
      myButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.record_button_normal)); 
     } 

     rl.addView(myButton,params); 

    } 

И вы можете передать ответ Ada pterClass через его конструктор.

+0

Этот ответ не касается Q, который был конкретно «Я просто не уверен, как передать ответ от активности на адаптер для обновления изображения кнопки. ". Он просто показывает, как кнопка может быть изменена при ее нажатии: это не то же самое, что обновление кнопки после асинхронного вызова. – RichieHH