Я пытаюсь научиться программированию на Android, и пока все хорошо. Прямо сейчас я пытаюсь узнать что-то о потоках, но я не могу заставить свой код работать.Android: Передача параметра в Thread
я уже читал
http://developer.android.com/guide/faq/commontasks.html#threading http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html#concurrency_handler
Я пытался использовать как сделать мой код работает, но я понятия не имею, как это сделать, так как ни один из них не соответствует моим потребностям, и оба используют один и тот же пример индикатора прогресса.
У меня есть 3 кнопки в моем макете, которые я хочу перемещать (медленно) вверх или вниз. Я хотел сделать это с потоком, так как mainUI-активность не должна перестать работать при этом. Итак, моя идея состояла в том, чтобы начать новый поток, где я жду немного времени и задаю параметры, и я делаю это снова и снова.
Возможно, я мог бы решить эту проблему с помощью глобальных переменных, но я не хочу использовать такой «дешевый» трюк для чего-то подобного.
Мой код выглядит следующим образом (Большинство из них скопировано с двух сторон, так как я не могу найти рабочий пример для потока, в котором параметры приведены в Methods)
public class MainActivity extends Activity {
// Need handler for callbacks to the UI thread
final Handler mHandler = new Handler();
// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
public void run() {
updateResultsInUi();
}
};
protected void moveMenu(int direction, final int time) {
// Fire off a thread to do some work that we shouldn't do directly in the UI thread
Thread t = new Thread() {
public void run() {
for (int i = 0; i < 10; i++) {
doSomethingExpensive(time);
mHandler.post(mUpdateResults); // <--- Here im looking for a way to give i to the updateResultsInUi() Method
}
}
};
t.start();
}
private void updateResultsInUi(int i) {
// Back in the UI thread -- update our UI elements based on the data in mResults
ScrollView topScrollView = (ScrollView) findViewById(R.id.scrollView1);
LinearLayout botLinearLayout = (LinearLayout) findViewById(R.id.LinearLayoutButton);
LinearLayout.LayoutParams paramsScrollView = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,0,90+i);
LinearLayout.LayoutParams paramsLinearLayout = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,0,10-i);
topScrollView.setLayoutParams(paramsScrollView);
botLinearLayout.setLayoutParams(paramsLinearLayout);
}
// Simulating something timeconsuming
private void doSomethingExpensive(int time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void button_click_del(View v)
{
[...]
moveMenu(direction, time);
}
[...]
}
с некоторыми изменениями Я сделал это над всеми моими Runnables. Спасибо за код – SolidSnake