0

현재 웹 서버 "A"의 데이터를 Lazy Adapter를 사용하는 Listview로 구문 분석하고 있습니다. 각 행에는 버튼을 선택하면 별도의 AsyncTask 클래스를 사용하여 해당 행의 데이터를 웹 서버 "B"로 보냅니다. onTaskComplete를 사용하여 asynctask에서 콜백을 사용하여 활동을 업데이트하고 있습니다. 잘 작동하는, 나는 서버에서 올바른 응답을 얻을.비동기 작업 목록보기 업데이트 후 버튼보기

제 질문은 어떻게 서버의 응답에 따라 단추 이미지를 업데이트합니까? 예를 들어, 서버의 응답이 1이면 응답을 0으로하는 경우 버튼 이미지를 업데이트하고 버튼 이미지는 변경하지 마십시오. 나는 버튼 이미지를 업데이트하기 위해 액티비티의 응답을 어댑터로 전달하는 방법을 모르겠다. 어떤 조언을 주시면 감사하겠습니다.

MY CODE :

어댑터 :

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); 

    } 

그리고 당신은 응답을 전달할 수 있습니다 에이다 그것의 생성자를 통해 pterClass.

+0

이 답변은 Q에서 특별히 언급 한 Q를 해결하지 못합니다. "활동에서 어댑터로 응답을 전달하는 방법을 모르겠습니다. 버튼 이미지를 업데이트합니다. " 버튼을 클릭했을 때 버튼이 어떻게 바뀌는지를 보여줍니다. 이것은 비동기 호출이 끝난 후에 버튼을 업데이트하는 것과는 다릅니다. – RichieHH

관련 문제