のためのスレッドを聞いUiThreadにデータのスレッドを送信する私はこのスレッドどのようにハンドラを使用し、Java(アンドロイドスタジオ)</p> <p>を使用して応答
void obtenerDatosBackground() {
Thread EnviarCoordenadasHilo = new Thread(new Runnable() {
public void run() {
obtenerDatos();
}
});
statusSync.CheckConnection(EnviarCoordenadasHilo);
}
を持っていると私は私のコードでこれを持っている:
void configHandler()
{
//con esto le digo al handler que esta adjuntado a la UI
handler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
}
しかし、このハンドラをスレッドに設定する方法はわかりません。
は最後に、私は、get結果のリスナーを使用してUIを更新するが、私はこのメッセージを得た:ビュー階層は、その ビューに触れることができます作成し
のみ元のスレッドを。
私は読んだことがある(少し)に関するhandlerが、私は結果
私はこれが、それにコードを変更する必要がありを得たとき、私は、更新UI用(非UI)スレッドへのハンドラを設定することができる方法まだ私はスレッド対応のリスナーを使用しています REMEMBER
void obtenerDatosBackground()
{
Thread EnviarCoordenadasHilo = new Thread(new Runnable() {
public void run() {
obtenerDatos();
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() { //do what you want to do here
int uno=1;
}
});
}
});
statusSync.CheckConnection(EnviarCoordenadasHilo);
}
いけない仕事
void setmListado()
{
adapter = new VehiculoAdapter(getActivity(), mListado);
lvListado.setAdapter(adapter);
lvListado.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
vehicleObject = (Vehiculo) adapter.getItem(i);
edtEconomicNumber=vehicleObject.getNumeroEconomico();
if(mListener!=null)
mListener.onDismissResult(vehicleObject,edtEconomicNumber);
else
Log.w(getTag(),"Falta implementar OnFragmentInteractionListener");
dismiss();
}
});
txtBuscar.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
//f_car_listado.this.adapter.getFilter().filter(arg0);
//boolean uno=false;
if (count < before) {
// We're deleting char so we need to reset the adapter data
adapter.resetData();
}
adapter.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
ここで私はあなたが新しいスレッドを作成するAsyncTaskクラスを使用して、タスクが完了したときに通知されますあなたのハンドラのインスタンスを送信することができますスレッド
@Override
public void onFragmentFinished(boolean terminoBien, List<VehiculoResponseDTO> listado) {
dialogFragment.dismiss();
if(terminoBien)
{
if(listado.size()>0) {
mListado = ListadoDTOaVehiculos(listado);
//adapter = new VehiculoAdapter(getActivity(), mListado);
//lvListado.setAdapter(adapter);
setmListado();
//adapter.notifyDataSetChanged();
}
else {
this.dismiss();
f_seguimiento.DialogMensaje(getString(R.string.nohayvehiculos), getString(R.string.nohayvehiculosMensaje), true, null, getActivity());
}
}else
{
this.dismiss();
f_seguimiento.DialogMensaje(getString(R.string.ocurrioProblema),getString(R.string.errorVehiculos),true,null,getActivity());
}
}
とされ、このコード内に属している設定
Looper.getMainLooper()
を使用して、このラインにconfigHandler()
にスレッドそれは(非UI)でのUIスレッドとなしにある呼び出しされている場合ので、スレッド? – angel
あなたのビューを更新したい場所から上記のコードを呼び出してください。 – Ashish
無効obtenerDatosBackground(){ スレッドEnviarCoordenadasHilo =新しいスレッド(新しいRunnableを(){ ます。public void実行(){ obtenerDatos();ハンドラハンドラ=新しいハンドラ(Looper.getMainLooper()); handler.post (新しいRunnableを(){@Override ます。public void実行(){// あなたが}ここ を をやりたい});} を }); statusSync.CheckConnection(EnviarCoordenadasHilo); } – Ashish