2016-07-18 6 views
1

シナリオ終了時にListView項目を更新: を私はcustomAdapterfeeditem I setgetデータ、ReplyActivityMainActivityを持っています。Updateおよび他の活動が

MainActivityserverからdataを取得し、customAdapterを使用してListViewにそれをdisplyay。 ListViewは、以下に示され、onClickReplyActivityが開かれたbtnReplyを有する。 ReplyActivity

、私はEditTextButton、書き込みやonButtonClick後、EditTextからtextserverからsendですし、任意のActivityを起動せずにfinish()を呼び出すことによってSharedPreferencesに保存され、ReplyActivityが閉じている必要があり、これがフォアグラウンドにMainActivityをもたらします私のAdapterが使用されています。 私は既にが​​にもたらされたかどうかを検出するロジックをfinishingReplyActivityで検出しました。

今私の問題は、どのように私はちょうどbtnReplyReplyActivityを開始するにつながるclickedpositionrepStatusを更新することができますか?

私はこのシナリオに関連していないすべての答えを検索しました。しかし、私はthis here on SOに出くわしましたが、この場合はうまくいきません。

誰でも私がこれをやり遂げる方法を教えてくれれば、これを達成するのに役立つリソースを教えてください。非常に高く評価されます。

マイアダプタ:

public class FeedListAdapter extends BaseAdapter implements View.OnCreateContextMenuListener { 
    private Activity activity; 
    private LayoutInflater inflater; 

public View getView(final int position, View convertView, ViewGroup parent) { 

//  session = new SessionManager(MediaActivity.class); 
     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.feed_item, null); 
      convertView.setLongClickable(true); 
     } 

     if (imageLoader == null) 
      imageLoader = AppController.getInstance().getImageLoader(); 

     final TextView name = (TextView)convertView.findViewById(R.id.name); 
     final Button btnReply = (Button)convertView.findViewById(R.id.btnReply); 
     final TextView statusMsg = (TextView)convertView.findViewById(R.id.txtStatusMsg); 
     final TextView repStatus = (TextView)convertView.findViewById(R.id.repStatus); 


    btnReply.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(v.getContext(), ReplyActivity.class); 
       intent.putExtra("statusId", statusId.getText().toString()); 
       intent.putExtra("username", userName.getText().toString()); 
       v.getContext().startActivity(intent); 

       } 
      }); 
    } 
} 
+0

位置、トラックキーをトラッキングしないでください。 – Karakuri

+0

どうすればいいですか? @Karakuri –

+1

データにはどのような種類のキーまたはIDがありますか?あなたのデータ構造は、特定のキー/ IDを持つアイテムに対して効率的に検索できますか?私の答えは 'startActivityForResult()'を使用し、位置ではなくキーを渡すことです。 'EditActivity'の結果をセットした後にキーを戻し、' onActivityResult() 'でデータ構造内のそのキーを持つ項目を探してそれに応じて変更し、データが変更されたことをアダプタに通知します。 – Karakuri

答えて

0

ここには2つのオプションがあります。

のベストプラクティス1はstartActivityForResult(intent)を呼び出し、MainActivityonActivityResult()コールバックメソッドをオーバーライドすることである。(guide here

2番目のオプションは、ReplyActivity内ShardPreference boolean firstTime = falseを設定し、MainActivity内でオーバーライドonResumeの中身をチェックして、このかどうかを確認することです初めてであるかどうか。 (onResumeが呼び出されていて、いつでもアクティブUIが前面に戻ってきます。onCreatの後)

+0

申し訳ありません私は私の質問を更新しました。私はそれを試みたが、動かさない。ただそれをもう一度見てください –

+0

問題は私が変更しているアイテムの位置をどのように知ることができるのですか? –

0

ちょうどあなたは、あなたがonResume

注で呼び出すアダプタでパブリックメソッドを持つことができ、その後、あなたのMainActivityにonResumeメソッドをオーバーライド:OnResumeは、最初に呼び出されますOnCreateメソッドの直後の時間に注意してください。最初のOnResumeと、前回のOnResume呼び出しの違いを伝える方法を見つけてください。

+0

申し訳ありませんが私の質問を更新しました。私はそれを試みたが、動かさない。ただそれをもう一度見てください –

0

onResume()メソッドを使用できます。

@Override 
public void onResume() { 
    super.onResume(); // Always call the superclass method first 

    // Check here if the text from edittext was saved in sharedpreference or not. 

    // Refresh the adapter 
    adapter.notifyDataSetChanged() 

} 

はもっとここに参照してください:repStatusを更新するためのhttps://developer.android.com/training/basics/activity-lifecycle/pausing.html

を: onListItemClickを実装します。次に、IDでビューを取得し、それを更新します。

Android ListView, OnListItemClick find all the views of row

+0

申し訳ありません私は質問を更新しました。私はそれを試みたが、動かさない。もう一度見てください –

+0

SharedPreferenceを使用してrepStausを保存することができます。 –

+0

私はすでにそれをしています。私はその質問に言及した。 @Akshar –

関連する問題