2012-04-24 11 views
0

何か方法があれば、startActivityForResult(..)メソッドを呼び出す方法を教えてくれますか?class extends ArrayAdapter?android - startActivityForResultからArrayAdapter

ありがとうございました。

EDIT:ARRAYADAPTERの追加されたCODE:

ありMyAdapterクラスのコードです:

public class MyAdapter extends ArrayAdapter {

public static final String bundle_text = "some_text"; 

public MyAdapter(Context context, int textViewResourceId, List<MyAdapterItem> data) { 
    super(context, textViewResourceId, data); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 

    // ... 

    row.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent intent = new Intent(getContext(), MyNewActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      int id = 1; 

      Bundle bundle = new Bundle(); 
      bundle.putLong(MyAdapter.bundle_text, id); 

      intent.putExtras(bundle); 
      getContext().startActivity(intent); 
     } 
    }); 

    return super.getView(position, convertView, parent); 
} 

}

すべての作品は、しかし、ArrayAdapterクラスからstartActivityForResultを呼び出すことはできません、私は唯一のstartActivtyを呼び出すことができます。 しかし、MyNewActivityの終了後、私はlistviewをリフレッシュしたいと思いますが、私はstartActivityForResultを呼び出すことができません。

+0

いくつかのアドパートコードを貼り付けることができますか? –

+0

startActivityForResultはActivityのメソッドです。 ActivityサブクラスのスコープまたはActivityサブクラスの子クラスで呼び出す必要があります。あなたは何をしようとしているのですか? –

+0

リストビューで同じデータを表示したい。 1つの行をクリックした後、新しいアクティビティを開始します。これまではOKです。そして、(新しい活動が閉じられた後に)私はリフレッシュリストビューをしたい)。しかし、問題がある、それは私が知っている、リストビューアをリフレッシュする方法と方法は、新しい活動を閉じた。 – Dan

答えて

1

このよくある誤解(旧スレッドであると、私はちょうどアウトラインを与える)

  1. アダプタは専用のビューを一覧表示するためのデータ用です - それは、行のためのあなたのgetViewメソッドのようなビューを返しません、実際にはGUIイベントは処理されません。これらのイベントはアクティビティで処理されます。実際、アダプターがインターネットやデータベースからたくさんの行をロードしている場合は、UIスレッド外で実行する必要があります。

  2. アクティビティはイベントです。アクティビティ内のリストビューにクリックリスナーをアタッチします。それでは、例えば詳細編集アクティビティ - すべてがUIスレッドです。 UIスレッドからアクティビティを開始するのに問題はありません。

  3. アダプターのアップデートの問題!詳細アクティビティから戻ってくると、アダプターが更新されていないため、リストは更新されません。これを行うには、RESULTのアクティビティの詳細を開始します。どのアダプターのものでも詳細な「フォーム」を乱雑にしないでください。実際には、詳細レコードで作成または編集されたPOJOを返し、データベースをまったく気にする必要はありません。

  4. アクティビティでは、onActivityResult()をリッスンし、アダプタに挿入します(たとえばSQLiteをアプリに持っている場合はデータベースバックエンド)。次に、リストビュー用に変更したデータに通知します。自動的にリストビューが更新されます。

listviewが再読み込みされると、パフォーマンスが問題になることがあります。ほとんどの場合、アダプターに追加してリストア・ビューのデータに変更を加えたことを通知するだけでなくなります。データの表示は「インクリメンタル」なので、行1〜5の行3を編集した可能性があります。リストビューでは、1〜5行の表示位置が更新されます。しかし、1つしか変更されていないときに500行をリロードするとパフォーマンスの問題が発生する可能性があります:)

+0

これはいい説明ですが、ListAdapterのビューを膨らませて必要な作業をすべて行い、リスナーをアクティビティにアタッチすると、onCreate()がおそらくListAdapter getView()関数の結果を見なかったためクラッシュします。 resultの別のアクティビティをアクティブにするgetView()でリスナーをアタッチすると、まったく動作しないため、私は何をすべきですか:( – soshial

関連する問題