2015-05-04 74 views
2

场景:将项目从分段添加到列表视图

首次用户登录并进入主活动,其中包含默认打开的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); 
         } 
        }); 

最后我得到使用意图的值,如下所示:

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中有一个列表视图,所以如何将此值添加到列表视图 我试图使用这种方式,但logcat显示为空异常,因为当我的mainactivity首先加载主片段负载和我没有得到任何价值f ROM意图:

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; 
    } 

} 

任何人都可以帮我解决这个问题吗?

+1

为什么不使用startActivityForResult()? – JafarKhQ

+0

@ JafarKhQ-你能告诉我样本我该怎么去startActivityForResult() – coder

回答

2

1-从HomeFragment/MainActivity开始你使用

startActivityForResult(addTaskIntent, CODE_ADD_TASK); 

2 - 现在,在您AddTaskActivity变化btnaddlist回调2日活动AddTaskActivity

@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

您可以添加第一次加载检查,如下所示。

String ItemName = getArguments().getString("Task Added", ""); 
if(ItemName != "") { 
    list.add(ItemName); 
} 

所以它不会崩溃。

+0

@ Vishal-首先感谢您的回复,但最初当我的主要活动加载家庭片段时,还加载了试图获取应用程序崩溃的字符串ItemName的位置。 – coder

+0

查找更新的答案。因为它会返回空白字符串,如果没有找到。 – vishalk