2017-08-10 25 views
-1

私はCardViewの中に2 TextViewsを持っています。私はtextview.SetVisibility(View.GONE)を書いた後でも、特定のConditonsのためにTextViewの1つを隠す必要があります。 list_item.xmlCardView内のTextViewは表示されません

助けてください

<?xml version="1.0" encoding="utf-8"?> 

    <android.support.v7.widget.CardView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:layout_marginTop="10dp" 
     android:padding="30dp"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <TextView 
       android:id="@+id/listitemtaskname" 
       android:layout_marginLeft="5dp" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textStyle="bold" 
       android:textSize="25sp" 
       tools:text="Hi" /> 


      <TextView 
       android:id="@+id/listitemdatedetails" 
       android:layout_marginLeft="5dp" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textSize="15sp" 
       tools:text="By" /> 
     </LinearLayout> 
     > 

    </android.support.v7.widget.CardView> 

これらは私のrecyclerviewに使用されています。 listitemdatedetailsが空の場合、私はそれを隠そうが、それは基本的に、あなたの例では、あなたがのLinearLayout内TextViewsのいずれかを隠すことはできません離れ

public class TaskCursorAdapter extends RecyclerCursorAdapter<TaskCursorAdapter.ViewHolder> { 
    Context context; 
    Cursor cursor; 


    public TaskCursorAdapter(Context context, Cursor cursor){ 
     super(context,cursor); 
     this.cursor=cursor; 
     this.context=context; 

    } 

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     public TextView taskname; 
     public TextView dateDetails; 
     Context context; 
     Cursor cursor; 

     public ViewHolder(View view,Context context,Cursor cursor) { 
      super(view); 
      this.context = context; 
      this.cursor = cursor; 
      taskname=(TextView)view.findViewById(R.id.listitemtaskname); 
      dateDetails=(TextView)view.findViewById(R.id.listitemdatedetails); 
      view.setOnClickListener(this); 
     } 


     @Override 
     public void onClick(View v) { 

      // Form the content URI that represents the specific pet that was clicked on, 
      // by appending the "id" (passed as input to this method) onto the 
      // {@link PetEntry#CONTENT_URI}. 
      // For example, the URI would be "content://com.example.android.pets/pets/2" 
      // if the pet with ID 2 was clicked on. 
      Intent intent = new Intent(context, EditorActivity.class); 
      Uri currentPetUri = ContentUris.withAppendedId(TaskContract.TaskEntry.CONTENT_URI, this.getAdapterPosition()+1); 

      intent.setData(currentPetUri); 
      context.startActivity(intent); 


     } 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext()); 
     View view= layoutInflater.inflate(R.layout.list_item,parent,false); 
     return new ViewHolder(view,context,cursor); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) { 

     int taskColumnIndex=cursor.getColumnIndex(TaskContract.TaskEntry.NAME); 
     int dateColumnIndex=cursor.getColumnIndex(TaskContract.TaskEntry.DUEDATE); 
     int timeColumnIndex=cursor.getColumnIndex(TaskContract.TaskEntry.DUETIME); 

     String task=cursor.getString(taskColumnIndex); 
     String dateString=cursor.getString(dateColumnIndex); 
     String timeString=cursor.getString(timeColumnIndex); 

     viewHolder.cursor = cursor; 
     viewHolder.taskname.setText(task); 

     if(timeString==null && dateString==null){ 
      //viewHolder.dateDetails.setText(""); 
      dateDetails.setVisibility(View.GONE); 

     } 
     else { 
      viewHolder.dateDetails.setText(dateString+"\t\t"+timeString); 
     } 

    } 
} 
+0

質問にコードを追加してください –

+0

見てください。私は質問を編集しました – Fargo

+0

これはコンパイルされますか?あなたはあなたのアダプターのメンバーとしてdateDetailsにアクセスしていますが、それはビューホルダーの一部です。 try viewHolder.dateDetails.setVisibility(View.GONE); – k0bin

答えて

0

を行っていませんCursorAdapterのonBindViewHolder方法でそれ を隠そうこれは、CardViewのLinearLayoutをCardViewに使用できないため、CardViewの子です。

内部で要素を非表示にしたい場合は、メインレイアウトをLinearLayoutに設定し、内側に隠すTextViewを配置してください。ちょうどこのように:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:layout_marginTop="10dp" 
    android:padding="30dp" 
    android:orientation="vertical"> 

    <android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/listitemtaskname" 
      android:layout_marginLeft="5dp" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:textSize="25sp" 
      tools:text="Hi" /> 


     <TextView 
      android:id="@+id/listitemdatedetails" 
      android:layout_marginLeft="5dp" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textSize="15sp" 
      tools:text="By" /> 

    </android.support.v7.widget.CardView> 

</LinearLayout> 

あなたの要素に可視性を設定しようとします。

関連する問題