【发布时间】:2016-06-04 04:21:00
【问题描述】:
我有一个包含两个选项卡的片段的 MainActivity,每个选项卡中有一个片段(ChatListFragment 和 FriendListFragment)。每个片段都有 ListView。当用户点击 ListView 的每一行时,会显示 ChatActivity。
我希望 ChatListFragment 中的 ListView(使用 ListAdapter 作为调用 ChatActivity 的适配器)在 ChatActivity 关闭后更新其 ListView。我在代码中尝试了如下所示的 onActivityResult 方法,但 requestCode 始终为 -1。
MainActivity.java
public class MainActivity extends AppCompatActivity {
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult: " + " " + requestCode + " == " + MYACTIVITY_REQUEST_CODE + " and " + resultCode + " == " + Activity.RESULT_OK);
Log.d(TAG, "onActivityResult: " + MainActivity.class.getSimpleName());
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
...
}
ChatListFragment.java
public class ChatListFragment extends Fragment {
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult: " + TAG);
Log.d(TAG, "onActivityResult: " + " " + requestCode + " == " + MYACTIVITY_REQUEST_CODE + " and " + resultCode + " == " + Activity.RESULT_OK);
if ((requestCode == MYACTIVITY_REQUEST_CODE) && (resultCode == Activity.RESULT_CANCELED)) {
List<Friend> friendList = getFriendChatList();
adapter = new ListAdapter(getActivity(), R.layout.fragment_list, friendList, true);
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
Log.d(TAG, "onActivityResult number of friend chats: " + getFriendChatList().size());
if(friendList.isEmpty()) {
linearLayout.setVisibility(View.VISIBLE);
} else {
linearLayout.setVisibility(View.GONE);
}
}
}
}
ChatActivity.java
public class ChatActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (getParent() == null) {
setResult(Activity.RESULT_OK);
} else {
getParent().setResult(Activity.RESULT_OK);
}
}
...
}
ListAdapter.java
public class ListAdapter extends ArrayAdapter<Friend> {
private static final int MYACTIVITY_REQUEST_CODE = 9000;
public ListAdapter(Context context, int resource, List<Friend> objects, boolean isChat) {
super(context, resource, objects);
this.context = context;
}
@Override
public View getView(final int position, final View convertView, ViewGroup parent) {
View view = convertView;
LayoutInflater layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(null == view) {
view = layoutInflater.inflate(R.layout.list_friend, null);
}
final Friend friend = friendList.get(position);
if(null != friend) {
final CardView rowLayout = (CardView) view.findViewById(R.id.row_layout);
final ImageView friendImage = (ImageView) view.findViewById(R.id.list_friend_image);
final TextView friendName = (TextView) view.findViewById(R.id.list_friend_name);
final TextView friendDescription = (TextView) view.findViewById(R.id.list_friend_description);
final TextView friendLastChatTime = (TextView) view.findViewById(R.id.list_friend_lastChatTime);
// Open chat activity
rowLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ChatActivity.class);
intent.putExtra(KEY_FRIEND_NAME, friend.getName());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
((Activity) context).startActivityForResult(intent, MYACTIVITY_REQUEST_CODE);
}
});
}
return view;
}
}
【问题讨论】:
-
你能分享你调用 ChatActivity 的代码吗?
-
添加代码 ListAdapter 供您参考 :)
标签: java android listview android-fragments