2017-07-01 1 views
1

J'ai des problèmes pour obtenir cette vue juste pour apparaître. Quand je vais à l'écran qui devrait avoir la vue rien qui se passe dans la vue Voici les fichiers pertinents:Comment afficher cette vue personnalisée?

CreateTimerActivity.java

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

    setContentView(R.layout.activity_create_timer); 

    final Context context = this; 

    mVisible = true; 
    mControlsView = findViewById(R.id.create_timer_content_controls); 
    mContentView = findViewById(R.id.create_timer_content); 


    // Set up the user interaction to manually show or hide the system UI. 
    mContentView.setOnClickListener((View view) -> { 
     toggle(); 
    }); 

    /*XmlPullParser parser = getResources().getXml(R.id.view_tim); 
    AttributeSet attributes = Xml.asAttributeSet(parser);*/ 
    final TableLayout tableLayout = (TableLayout) findViewById(R.id.create_timer_table); 

    TimerFormView timerFormView = new TimerFormView(context, tableLayout); 
    timerFormView.initializeComponents(); 
} 

TimerFormView.java

public class TimerFormView extends TableLayout { 

    private Context context; 
    private final ContentValues timerValues; 
    private final ContentValues timerSegmentValues; 

    private final TableLayout tableLayout; 

    public TimerFormView(Context context, TableLayout tableLayout) { 
     this(context, null, tableLayout); 
    } 

    public TimerFormView(Context context, AttributeSet attrs, TableLayout tableLayout) { 
     super(context, attrs); 

     TypedArray a = context.obtainStyledAttributes(attrs, 
       R.styleable.TimerFormView, 0, 0); 
     String titleText = "Hello"; 
     @SuppressWarnings("ResourceAsColor") 
     int valueColor = a.getColor(0, 
       android.R.color.holo_blue_light); 
     a.recycle(); 

     this.context = context; 
     this.tableLayout = tableLayout; 

     TimerDatabase timerDatabase = new TimerDatabase(context); 
     SQLiteDatabase databaseHelper = timerDatabase.getWritableDatabase(); 
     timerValues = new ContentValues(); 
     timerValues.put(TimerDatabase.TimerEntry.COLUMN_NAME_TIMER_NAME, ""); 
     timerSegmentValues = new ContentValues(); 
    } 

    public TimerFormView(Context context, AttributeSet attrs) 
    { 
     this(context, attrs, null); 
    } 

    public void initializeComponents() { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     inflater.inflate(R.layout.view_timer_form, this, true); 

     final TextView timerNameTextView = (TextView) findViewById(R.id.timerNameTxt); 
     timerNameTextView.setSingleLine(true); 
     InputFilter[] filterArrayTimerName = new InputFilter[1]; 
     filterArrayTimerName[0] = new InputFilter.LengthFilter(32); 
     timerNameTextView.setFilters(filterArrayTimerName); 

     final Button saveTimerBtn = (Button) findViewById(R.id.saveTimerBtn); 
     saveTimerBtn.setEnabled(false); 
     saveTimerBtn.setOnClickListener((View v) -> { 
      timerValues.put(TimerDatabase.TimerEntry.COLUMN_NAME_TIMER_NAME, timerNameTextView.getText().toString()); 
     }); 

     // Enable the timer to be saved once text is entered 
     TextWatcher timerNameTextWatcher = new TextWatcher() { 
      public void afterTextChanged(Editable s){ 
       if(s.length() > 0) { 
        saveTimerBtn.setEnabled(true); 
       } else { 
        saveTimerBtn.setEnabled(false); 
       } 
      } 
      public void beforeTextChanged(CharSequence s, int start, int count, int after){ 
       // you can check for enter key here 
      } 
      public void onTextChanged (CharSequence s, int start, int before,int count) { 
      } 
     }; 

     EditText timerNameEditText = (EditText) findViewById(R.id.timerNameTxt); 
     timerNameEditText.addTextChangedListener(timerNameTextWatcher); 


     // Segments 
     final TextView segmentNameTextView = (TextView) findViewById(R.id.segmentNameTxt); 
     segmentNameTextView.setSingleLine(true); 
     InputFilter[] filterArraySegmentName = new InputFilter[1]; 
     filterArraySegmentName[0] = new InputFilter.LengthFilter(32); 
     segmentNameTextView.setFilters(filterArraySegmentName); 

     Button addSegmentBtn = (Button) findViewById(R.id.addSegmentBtn); 
     addSegmentBtn.setEnabled(false); 
     addSegmentBtn.setOnClickListener((View v) -> { 
      // Content for the new segment 
      TableRow segmentTableRow = new TableRow(context); 
      segmentNameTextView.setText(segmentNameTextView.getText()); 
      segmentTableRow.addView(segmentNameTextView); 
      tableLayout.addView(segmentTableRow); 

      timerSegmentValues.put(TimerDatabase.TimerSegment.COLUMN_NAME_SEGMENT_NAME, segmentNameTextView.getText().toString()); 
     }); 

     TextWatcher segmentNameTextWatcher = new TextWatcher() { 
      public void afterTextChanged(Editable s){ 
       if(s.length() > 0) { 
        saveTimerBtn.setEnabled(true); 
       } else { 
        saveTimerBtn.setEnabled(false); 
       } 
      } 
      public void beforeTextChanged(CharSequence s, int start, int count, int after){ 
       // you can check for enter key here 
      } 
      public void onTextChanged (CharSequence s, int start, int before,int count) { 
      } 
     }; 

     EditText segmentNameEditText = (EditText) findViewById(R.id.segmentNameTxt); 
     segmentNameEditText.addTextChangedListener(segmentNameTextWatcher); 

     EditText segmentDurationEditText = (EditText) findViewById(R.id.segmentDurationTxt); 
     //segmentDurationEditText.addTextChangedListener(segmentTextWatcher); 

     EditText segmentRepeatEditText = (EditText) findViewById(R.id.segmentRepeatTxt); 
     //segmentRepeatEditText.addTextChangedListener(segmentTextWatcher); 

     setVisibility(View.VISIBLE); 

     super.layout(50, 50, 50, 50); 

     setOrientation(LinearLayout.HORIZONTAL); 
     setGravity(Gravity.CENTER_VERTICAL); 
    } 
} 

view_timer_form.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 

    android:layout_width="400dp" android:layout_height="400dp"> 

    <TableRow android:layout_width="400dp" android:layout_height="400dp"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Create Timer" 
      android:id="@+id/createTimerLbl" /> 
    </TableRow> 
    <TableRow android:layout_width="match_parent" android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="Timer Name" 
      android:id="@+id/timerNameLbl" 
      android:gravity="top" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/timerNameTxt" 
      android:layout_column="1" /> 
    </TableRow> 

    <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/addSegmentNameRow"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="Segment Name" 
      android:id="@+id/segmentNameLbl" 
      android:gravity="top" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/segmentNameTxt" 
      android:layout_column="1" /> 
    </TableRow> 
    <TableRow android:layout_width="match_parent" android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="Duration" 
      android:id="@+id/segmentDurationLbl" 
      android:gravity="top" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/segmentDurationTxt" 
      android:inputType="number" 
      android:layout_column="1" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="Seconds" 
      android:id="@+id/durationSecondsLbl" 
      android:gravity="top" /> 
    </TableRow> 
    <TableRow android:layout_width="match_parent" android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="Repeat" 
      android:id="@+id/segmentRepeatLbl" 
      android:gravity="top" /> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/segmentRepeatTxt" 
      android:inputType="number" 
      android:layout_column="1" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="Times" 
      android:id="@+id/segmentRepeatTimesLbl" 
      android:gravity="top" /> 

    </TableRow> 

    <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/addSegmentBtnRow"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Add Segment" 
      android:id="@+id/addSegmentBtn" /> 
    </TableRow> 
    <TableRow android:layout_width="match_parent" android:layout_height="wrap_content"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Save Timer" 
      android:id="@+id/saveTimerBtn" /> 
    </TableRow> 

</TableLayout> 

activité_create_timer.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#0099cc" 
    tools:context="com.example.timer.CreateTimerActivity"> 

    <TextView android:id="@+id/create_timer_content" android:layout_width="match_parent" 
     android:layout_height="match_parent" android:keepScreenOn="true" android:textColor="#33b5e5" 
     android:textStyle="bold" android:textSize="50sp" android:gravity="center" 
     android:text="" /> 

    <!-- This FrameLayout insets its children based on system windows using 
     android:fitsSystemWindows. --> 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true"> 

     <LinearLayout 
      android:id="@+id/create_timer_content_controls" 
      style="?metaButtonBarStyle" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      android:layout_marginTop="20dp" 
      tools:ignore="UselessParent"> 

      <com.example.timer.views.TimerFormView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/create_timer_table"> 
      </com.example.timer.views.TimerFormView> 

     </LinearLayout> 




    </FrameLayout> 

</FrameLayout> 
+0

add avant vue personnalisée classe –

+0

@EliasFazel Je viens troqué le vrai pour un exemple ... – Andy

+1

supprimer tout appel de CustomView de l'activité et le premier constructeur (uniquement défini constructeur avec le contexte et les attributs) et juste init ce que vous voulez à l'intérieur de la classe de vue –

Répondre

1

J'ai eu cette question et je l'ai résolu dans cette façon ...

  • Ne pas appeler une instance de CustomView ou même vars statiques de l'activité.
  • seulement définir constructeur avec (Contexte, Attributs)
  • et initialiser tout ce que vous voulez dans la classe customView.

Bonne chance

Nom du package