情景:
首次登录用户并进入mainactivity,其中包含默认打开的homefragment。现在,用户进入新的活动,我在其中添加一些文本来编辑文本,然后点击添加按钮,将用户返回到主要活动的主片段。
现在我的问题是如何将此文本添加到我的列表视图中。
默认情况下,home片段首次加载时不包含任何包。
首先,当我的主要活动加载时会触发:
public class HomeFragment extends Fragment {
ListView lv;
public HomeFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}
}
加载主片段之后它有一个列表视图,我需要在其中添加一些数据。 现在我点击菜单选项进入新活动。
在这里,我将一些文本添加到edittext中,并通过意图将该数据传递回mainactivity,如下所示:
addtask = (Button) findViewById(R.id.btnaddlist);
findViewById(R.id.btnaddlist).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View arg0) {
EditText edit = (EditText) findViewById(R.id.tskname);
Intent i = new Intent(AddTask.this,
MainActivity.class);
String TaskName = edit.getText().toString();
i.putExtra("NewTask", TaskName);
startActivity(i);
}
});
最后我使用intent获取值,如下所示:
String AddedTask ;
if (intent.hasExtra("NewTask")) {
AddedTask = this.getIntent().getExtras().getString("NewTask");
Log.d("Task Added:",AddedTask);
Bundle bundle = new Bundle();
bundle.putString("Task Added", AddedTask);
HomeFragment fragobj = new HomeFragment();
fragobj.setArguments(bundle);
}
现在我的问题是我在homefragment中有一个listview,所以如何将这个值添加到listview 我正在尝试使用这种方式,但是logcat向我显示了null异常,因为当我的mainactivity首先加载home片段时,我没有从intent获取任何值:
public class HomeFragment extends Fragment {
ListView lv;
public HomeFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
lv = (ListView)rootView.findViewById(R.id.tasklist);
Bundle b = getActivity().getIntent().getExtras();
if (b != null) {
ArrayList<String> list = new ArrayList<String>();
ArrayAdapter<String> Listadapter;
String ItemName = getArguments().getString("Task Added");
list.add(ItemName);
Listadapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),android.R.layout.simple_list_item_1, list);
lv.setAdapter(Listadapter);
Listadapter.notifyDataSetChanged();
}
return rootView;
}
}
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
1-从HomeFragment/MainActivity
开始使用
AddTaskActivity
startActivityForResult(addTaskIntent, CODE_ADD_TASK);
2-现在AddTaskActivity
更改btnaddlist
回调
@Override
public void onClick(View v) {
EditText edit = (EditText) findViewById(R.id.tskname);
Intent i = new Intent();
String TaskName = edit.getText().toString();
i.putExtra("NewTask", TaskName);
setResult(RESULT_OK, i);
finish();
}
3-在MainActivity
覆盖方法onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == CODE_ADD_TASK) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
String taskName = data.getStringExtra("NewTask");
// send this data to your Fragment and add it to the list
}
}
}
答案 1 :(得分:-1)
您可以添加首次加载检查,如下所示。
String ItemName = getArguments().getString("Task Added", "");
if(ItemName != "") {
list.add(ItemName);
}
所以它不会崩溃。