2017-07-01 10 views
0

1つのアクティビティに2つのフラグメントがあります。 最初のフラグメント:ユーザーが日付と時刻を選択してから「選択」ボタンを押します。 SQL DBに送信されたユーザーの選択。ユーザーは日付と時刻を選択することができます。 2番目のフラグメント:がListViewに設定されています。SQL DBから読み取ったユーザーのすべての選択(日付と時刻)。2つのフラグメントに1つのボタンを使用する方法

私の問題:私は、ユーザーの押しボタンを "CHOOSE" 断片1.

最初のフラグメント

public class ChooseTimeFragment extends Fragment { 

    String date,time,amPm; 
    Spinner spinnerDate,spinnerTime,spinnerAmPm; 
    private DbHelper db; 
    public ChooseTimeFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     final View view=inflater.inflate(R.layout.fragment_choose_time, container, false); 

     db = DbHelper.getInstance(view.getContext()); 
     spinnerDate = (Spinner) view.findViewById(R.id.spinnerDate); 
     ArrayAdapter<CharSequence> adapterDate = ArrayAdapter.createFromResource(getActivity(), 
       R.array.date_array, android.R.layout.simple_spinner_item); 
     adapterDate.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinnerDate.setAdapter(adapterDate); 
     date=spinnerDate.getSelectedItem().toString(); 
     spinnerTime = (Spinner) view.findViewById(R.id.spinnerTime); 
     ArrayAdapter<CharSequence> adapterTime = ArrayAdapter.createFromResource(getActivity(), 
       R.array.time_array, android.R.layout.simple_spinner_item); 
     adapterTime.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinnerTime.setAdapter(adapterTime); 
     time=spinnerTime.getSelectedItem().toString(); 
     spinnerAmPm = (Spinner) view.findViewById(R.id.spinnerAmPm); 
     ArrayAdapter<CharSequence> adapterAmpm = ArrayAdapter.createFromResource(getActivity(), 
       R.array.amPm_array, android.R.layout.simple_spinner_item); 
     adapterAmpm.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinnerAmPm.setAdapter(adapterAmpm); 
     amPm=spinnerAmPm.getSelectedItem().toString(); 


     Button bChoose=(Button) view.findViewById(R.id.btnChooseDT); 
     bChoose.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       initialize(); 
       if(validate()){ 
        db.addUserChooseDateAndTime(date,time+amPm,view.getContext()); 

       } 
      } 
     }); 

     return view; 
    } 

    private void initialize(){ 
     date=spinnerDate.getSelectedItem().toString(); 
     time=spinnerTime.getSelectedItem().toString(); 
     amPm=spinnerAmPm.getSelectedItem().toString(); 
    } 
    private boolean validate(){ 
     boolean valid=true; 

     if (date.equals("DATE")||time.equals("TIME")){ 
      Toast.makeText(getContext(),date + " Please Enter Date and Time", Toast.LENGTH_SHORT).show(); 
      valid=false; 
     } 
     return valid; 
    } 

} 

第2のフラグメント ListViewコントロールを毎回更新するには成功していませんよ

public class ChosenListFragment extends Fragment { 

    private DbHelper db; 
    public static Activity myActivity; 

    public ChosenListFragment() { 
    } 
    MyChosenListViewAdapter adapter; 
    ListView listView; 
    ArrayList<TimeAndDate> timeAndDateArrayLis; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     final View view = inflater.inflate(R.layout.fragment_chosen_list, container, false); 
     db = DbHelper.getInstance(view.getContext()); 

     refreshList(view); 


     return view; 
    } 

    public void refreshList(View view){ 
     ArrayList<TimeAndDate> timeAndDateArrayList =db.getListDateAndTime(getContext()); 
     adapter = new MyChosenListViewAdapter(getContext(), timeAndDateArrayList); 
     listView = (ListView) view.findViewById(R.id.listDateAndTime); 
     listView.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 

    } 


} 

lon g検索、助け?ありがとう!

答えて

0

簡単な方法:

使用すると、1つの活動に2つのフラグメントを持っている場合(例:ParentActivity)あなたは親アクティビティによって別のフラグメントからアクセスすることができます。

親アクティビティに、このようなものを追加します。

public void refreshListFragment(){  
    ListFragment list = 
    getSupportFragmentManager().findFragmentById(R.id.fragment_list);//init on onCreate or ... is better. 
    list.refreshList();  
} 

はdb.addUserChooseDateAndTime(日付、時間+ AMPM、view.getContext())の後のコードの下に追加します。

((ParentActivity)getActivity()).refreshListFragment(); 

より良い方法:link

又は

使用インタフェースが通信する

新しいAndroidアーキテクチャコンポーネントを使用して、Android official site

または

変更を通知するためのオブザーバパターンを使用します。

LocalBroadcastManager:

public class ListFragment extends Fragment { 


public static final String ACTION_UPDATE = "action_update"; 

private BroadcastReceiver updateBroadcastListener = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Updated", Toast.LENGTH_SHORT).show(); 
    } 
}; 

@Override 
public void onResume() { 
    super.onResume(); 
    LocalBroadcastManager.getInstance(getContext()) 
      .registerReceiver(updateBroadcastListener, new IntentFilter(ListFragment.ACTION_UPDATE)); 

} 

@Override 
public void onPause() { 
    LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(updateBroadcastListener); 
    super.onPause(); 
} 
.... 
} 

と項目をリストする任意の変更後:

LocalBroadcastManager.getInstance(SecondActivity.this).sendBroadcast(new Intent(ListFragment.ACTION_UPDATE)); 

あなたは自分のオブザーバーパターンを書き込むか、も登録できEventBus http://greenrobot.org/eventbus/documentation/how-to-get-started/

のようなものを使用することができますデータベースカーソルは更新を通知されます。 Listen to any changes in a cursor in android

0

問題ボタンをクリックするたびにlistViewを更新していないという問題があります。クリックするたびにリフレッシュリストを作成する必要があります。あなたの主力クラスを分かち合うことができれば、私はもっとよく見ることができます。

関連する問題