15

モノドロイドを習ってみました!Java コードを C# に書き直そうとしましたが、問題があります。Runnable の使用方法がわかりません。これは Java のコードのスニペットで、C# に変換できませんでした。

public class RunActivity extends Activity implements OnClickListener
{
   ...

   private Handler mHandler;

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.run);
       ... 
       mHandler = new Handler();
       mHandler.postDelayed(mUpdateGeneration, 1000);
   }

   private Runnable mUpdateGeneration = new Runnable()
   {
       public void run()
       {
          mAdapter.next();
          mLifeGrid.setAdapter(mAdapter);

          mHandler.postDelayed(mUpdateGeneration, 1000);
       }
   }; 
   ...

このコードをどのように記述して Runnable を使用する必要があるか説明してもらえますか? この Runnable は、gridview アダプターを更新し、バックグラウンドでアダプターから gridview にデータをロードするために使用します。メインスレッドでアダプターを更新しようとしたら?このように(C#コード):

mAdapter.next()
mLifeGrid.Adapter = mAdapter;
Thread.Sleep(1000);

アクティビティが停止しています。Runnable を使用できない場合、新しいスレッドでアダプターとグリッドビューの更新を実装するにはどうすればよいですか? C# スレッドを使用すると、次のようになります。

...
Thread th = new Thread(new ThreadStart(mUpdatGeneration));
th.Start();
}
public void mUpdateGeneration()
{
    mAdapter.next()
    mLifeGrid.Adapter = mAdapter;
    Thread.Sleep(1000);
}

エラー「System.NullReferenceException」が生成されます

助けてくれてありがとう!PS私の英語でごめんなさい:)

4

3 に答える 3

6

パラメータをとるオーバーロードがPostDelayed()Actionあるように思われるので、簡単な方法は次のようなことです。

void UpdateGeneration()
{
    mAdapter.next();
    mLifeGrid.setAdapter(mAdapter);
    mHandler.PostDelayed(UpdateGeneration, 1000);
}

// ...

mHandler.PostDelayed(UpdateGeneration, 1000);

(免責事項:私は実際にMonoDroidを使用したことはありませんが、有効であるはずです。)

于 2013-02-20T20:26:12.753 に答える
5

Runnable 実装を C# に変換する方法は次のとおりです。

private Java.Lang.Runnable mUpdateGeneration = new Java.Lang.Runnable(() =>
{
     mAdapter.next();
     mLifeGrid.setAdapter(mAdapter);
     mHandler.postDelayed(mUpdateGeneration, 1000);
});
于 2013-11-07T23:08:08.817 に答える