2014-10-30 104 views
0

编辑:我浏览了过去几个小时有关此许多问题,似乎没有适用于我有的代码;请不要标记为重复。刷新列表视图时,选择片段选项卡

发生了什么是在一个选项卡中,即时将项目添加到在单独的选项卡中查看的列表视图,但我希望能够更新列表视图与应用程序内添加的项目,而不必退出然后重新输入让列表更新。

这是我的两个片段Java文件的代码。

其中添加它:

package tabs.ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmedstabbeta; 

/** 
* Created by WindowsSucks on 10/29/2014. 
*/ 

import android.app.AlertDialog; 
import android.app.TimePickerDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.os.Environment; 
import android.support.v4.app.Fragment; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.TimePicker; 
import android.widget.Toast; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Locale; 

public class AddMedFragment extends Fragment { 

    private CharSequence mTitle; 
    final static int RQS_1 = 1; 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     View rootView = inflater.inflate(R.layout.add_med_layout, container,false); 

     final TextView medOut = (TextView)rootView.findViewById(R.id.medName); 
     final TextView doseOut = (TextView)rootView.findViewById(R.id.dosageout); 
     final TextView timeOut = (TextView)rootView.findViewById(R.id.timeOut); 
     final TextView dayout = (TextView)rootView.findViewById(R.id.daystxt); 
     final EditText med_dose = (EditText)rootView.findViewById(R.id.med_dose); 



     med_dose.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { 

      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { 
       doseOut.setText(med_dose.getText()); 
      } 

      @Override 
      public void afterTextChanged(Editable editable) { 

      } 
     }); 

     final Button setTimePickerButton = (Button) rootView.findViewById(R.id.timePickerButton); 
     setTimePickerButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       final Calendar mcurrentTime = Calendar.getInstance(); 
       int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); 
       int minute = mcurrentTime.get(Calendar.MINUTE); 
       TimePickerDialog dialog = new TimePickerDialog(getActivity(), 
         new TimePickerDialog.OnTimeSetListener(){ 
          @Override 
          public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { 
           if(selectedHour > 12){ 
            selectedHour-= 12; 
           } 

           selectedMinute = timePicker.getCurrentMinute(); 
           if(selectedMinute < 10){ 
            //selectedMinute = String.valueOf(selectedMinute); 
            timeOut.setText(selectedHour + ":" +"0"+ selectedMinute); 
           }else{ 
            timeOut.setText(selectedHour + ":" + selectedMinute); 
           } 



          } 
         },hour,minute,false); 

       dialog.setTitle("Select Time"); 
       dialog.show(); 

      } 
     }); 

     final TextView medEntry = (TextView) rootView.findViewById(R.id.med_name); 
     medEntry.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { 

      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { 
       medOut.setText(medEntry.getText()); 
      } 

      @Override 
      public void afterTextChanged(Editable editable) { 

      } 
     }); 

     final Button dayPicker = (Button)rootView.findViewById(R.id.dayPicker); 
     dayPicker.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       final CharSequence[] items = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; 
       // arraylist to keep the selected items 
       final ArrayList selectedItems=new ArrayList(); 

       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       builder.setTitle("Select Days To Take"); 
       builder.setMultiChoiceItems(items, null, 
         new DialogInterface.OnMultiChoiceClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int indexSelected, 
               boolean isChecked) { 
           if (isChecked) { 
            // If the user checked the item, add it to the selected items 
            selectedItems.add(indexSelected); 
           } else if (selectedItems.contains(indexSelected)) { 
            // Else, if the item is already in the array, remove it 
            selectedItems.remove(Integer.valueOf(indexSelected)); 
           } 
          } 
         }) 
         // Set the action buttons 
         .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 







           // Your code when user clicked on OK 
           // You can write the code to save the selected item here 
           String itemsChecked = selectedItems.toString(); 
           String days = ""; 
           if (itemsChecked.contains("0")) { 
            days = days + " Sunday"; 
           } 
           if (itemsChecked.contains("1")) { 
            days = days + " Monday"; 
           } 
           if (itemsChecked.contains("2")) { 
            days = days + " Tuesday"; 
           } 
           if (itemsChecked.contains("3")) { 
            days = days + " Wednesday"; 
           } 
           if (itemsChecked.contains("4")) { 
            days = days + " Thursday"; 
           } 
           if (itemsChecked.contains("5")) { 
            days = days + " Friday"; 
           } 
           if (itemsChecked.contains("6")) { 
            days = days + " Saturday"; 
           } 



           dayout.setText(days); 
          } 
         }) 
         .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 
           // Your code when user clicked on Cancel 

          } 
         }); 

       AlertDialog dialog = builder.create();//AlertDialog dialog; create like this outside onClick 
       dialog.show(); 
      } 
     }); 


     String SDRoot = Environment.getExternalStorageDirectory().getPath(); 
     final File output = new File (SDRoot,"output.txt"); 

     if(!output.exists()){ 
      try { 
       output.createNewFile(); 
       Context context = getActivity(); 
       CharSequence text = "Output File Created!"; 
       int duration = Toast.LENGTH_LONG; 

       Toast fileCreated = Toast.makeText(context, text, duration); 
       fileCreated.show(); 
      } catch (IOException e) { 
       Context context = getActivity(); 
       CharSequence text = "Output File Not Created!"; 
       int duration = Toast.LENGTH_LONG; 

       Toast fileNotCreated = Toast.makeText(context, text, duration); 
       fileNotCreated.show(); 
       e.printStackTrace(); 
      } 
     } 


     Button addbutton = (Button)rootView.findViewById(R.id.addMeds); 

     addbutton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(getActivity(),"Medication Added", Toast.LENGTH_SHORT).show(); 
       String outputLine = medOut.getText() + " "+ doseOut.getText() +" "+ dayout.getText() +":" + " "+ ":" + timeOut.getText() + "\n"; 

       try { 
        FileOutputStream fOut = new FileOutputStream(output, true); 
        OutputStreamWriter myOutputStreamWriter = new OutputStreamWriter(fOut); 
        myOutputStreamWriter.append(outputLine); 
        myOutputStreamWriter.flush(); 
        myOutputStreamWriter.close(); 


       } catch (Exception e) { 
        e.printStackTrace(); 
        Toast.makeText(getActivity(), e.getMessage(), 
          Toast.LENGTH_SHORT).show(); 
       } 

       ListView list = (ListView) getActivity().findViewById(R.id.viewMedsTxt); 
       ((BaseAdapter)list.getAdapter()).notifyDataSetChanged(); 
      } 
     }); 

     return rootView; 
    } 
} 

以及它被观看次数:

​​

很多的感谢!

编辑:

FragmentPageAdapter:

package tabs.ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmedstabbeta; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 

public class FragmentPageAdapter extends FragmentPagerAdapter { 
    public FragmentPageAdapter(FragmentManager fm) { 
     super(fm); 
    } 
    @Override 
    public Fragment getItem(int arg0) { 
     // TODO Auto-generated method stub 
     switch (arg0) { 
      case 0: 
       return new AddMedFragment(medView); 
      case 1: 

       return new ViewMedFragment(); 
      default: 
       break; 
     } 
     return null; 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 2; 
    } 
} 

回答

0

为什么不只是创建一个名为MedUpdateListener一个监听器接口与功能updateMed()。

public interface MedUpdateListener { 
    public void updateMed(); 
} 

让ViewMedFrament成为MedUpdateListener并实现updateMed()以便它重新读取您的数据。

public class ViewMedFramgent extends Fragment implements MedUpdateListener{ 

... 
@Override 
public void updateMed(){ 
     do some update stuff for your list 
} 

} 

添加construtor您AddMedFragment它接受MEdUpdateListener作为参数:

public class AddMedFragment extends Framgment{ 

     private MedUpdateListener onUpdateListener; 

     public AddMedFragment(MedUpdateListener onUpdateListener){ 
      this.onUpdateListener = onUpdateListener; 
     } 
} 

,只要你添加的东西:

this.onUpdateLisener.updateMed(); 
创建片段时

public class FragmentPageAdapter extends FragmentPagerAdapter { 

    private Fragment[] frags = new Fragment[2]; 

    public FragmentPageAdapter(FragmentManager fm) { 
     super(fm); 
     frags[0] = new ViewMedFragment(); 
     frags[1] = new AddMedFragment(frags[0]); 
    } 
    @Override 
    public Fragment getItem(int pos) { 
     return frags[pos]; 
    } 
    @Override 
    public int getCount() { 
     return frags.length(); 
    } 
} 

在你的addButton中调用onUpdateListener.updateMed()

+0

我不是很懂你在说什么 – 2014-10-30 08:50:35

+0

增加了一些代码。希望它有帮助 – maffelbaffel 2014-10-30 08:57:58

+0

添加片段时medView来自哪里?并在代码中我会实现this.onUpdateListener.updateMed() 什么代码确切需要在updateMed方法中使用..? 增加了一些代码来显示如何IM加入我的片段 – 2014-10-30 14:07:12

相关问题