2015-05-04 75 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