2017-05-23 4 views
0

Ich möchte einige Neuigkeiten mit CardView anzeigen (die zusammengelegt und erweitert werden kann). Standardmäßig wird CardView nicht erweitert, sodass nur der Nachrichtentitel angezeigt wird. Wenn sie jedoch erweitert wird, ist ein WebView sichtbar, der die Nachrichtenseite anzeigt.Aktivieren der Minimierung und Erweitern von CardView

meinen Code Diese sind so weit: `

News.java

public class News { 

private String title; 
private String url; 

public News(){ 
    this("", ""); 
} 

public News(String title, String url){ 
    this.title = title; 
    this.url = url; 
} 

public void setTitle(String title){ 
    this.title = title; 
} 

public void setUrl(String url){ 
    this.url = url; 
} 

public String getTitle(){ 
    return title; 
} 

public String getUrl(){ 
    return url; 
} 
} 

` NewsViewHolder.java

public class NewsViewHolder extends RecyclerView.ViewHolder { 
    public TextView newsTitle; 
    public WebView newsContent; 

    public NewsViewHolder(View itemView){ 
     super(itemView); 
     newsTitle = (TextView) itemView.findViewById(R.id.news_title); 
     newsContent = (WebView) itemView.findViewById(R.id.news_web_content); 
    } 
} 

NewsListAdapter.java

public class NewsListAdapter extends RecyclerView.Adapter<NewsViewHolder> { 

private final List<News> newsList; 

public NewsListAdapter(List<News> newsList) { 
    this.newsList = newsList; 
} 

@Override 
public NewsViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    final LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext()); 
    final View v = layoutInflater.inflate(R.layout.news_card, viewGroup, false); 
    return new NewsViewHolder(v); 
} 

@Override 
public void onBindViewHolder(NewsViewHolder holder, int i) { 
    holder.newsTitle.setText(newsList.get(i).getTitle()); 
    holder.newsContent.loadUrl(newsList.get(i).getUrl()); 
} 

@Override 
public int getItemCount() { 
    return newsList.size(); 
} 
} 

NewsFragment.java

public class NewsFragment extends Fragment { 

private RecyclerView recView; 

public static NewsFragment newInstance(String param1, String param2){ 
    NewsFragment fragment = new NewsFragment(); 
    return fragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_news, container, false); 
    recView = (RecyclerView) view.findViewById(R.id.news_list); 
    recView.setLayoutManager(new LinearLayoutManager(getActivity())); 

    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("News"); 

    List<News> dummyNews = new ArrayList<News>(); 
    for (int x = 1; x <= 5; x++){ 
     News news = new News("News #"+x, "file:///android_asset/www/dummy.html"); 
     dummyNews.add(news); 
    } 

    recView.setAdapter(new NewsListAdapter(dummyNews)); 
    return view; 
} 
} 

`

news_card.xml

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="@dimen/card_padding" 
    tools:background="#22000000"> 

    <TextView 
     android:id="@+id/news_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="@dimen/default_margin_padding" 
     android:textSize="@dimen/quiz_question_text_size" /> 

    <WebView 
     android:id="@+id/news_web_content" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 


    <!-- dummy sharing buttons --> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:textSize="16sp" 
      android:text="WhatsApp" 
      tools:ignore="HardcodedText" /> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:textSize="16sp" 
      android:text="E-mail" 
      tools:ignore="HardcodedText" /> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:textSize="16sp" 
      android:text="Facebook" 
      tools:ignore="HardcodedText" /> 
    </LinearLayout> 
</LinearLayout> 

Alle Nachrichten werden korrekt angezeigt. Jetzt sind die Probleme:

  1. Wie Sie eine Schaltfläche auf der rechten Seite der CardView hinzufügen, um zu ermöglichen kollabieren/erweitern?
  2. Wenn ausgeblendet, ist nur der Nachrichtentitel sichtbar.

Wie geht das? Oder gibt es eine CardView-Bibliothek von Drittanbietern, die meinen Anforderungen entspricht? Vielen Dank.

Antwort

0

Sie können eine Schaltfläche und beim Klicken auf diese Schaltfläche mich die Nachrichten Details Sichtbarkeit auf GONE. Es wird die Nachrichtendetails verbergen und nur den Titel der Nachrichten anzeigen. Um das Layout zu animieren, verwenden Sie android:animateLayoutChanges="true" für die übergeordnete ViewGroup (LinearLayout oder RelativeLayout oder beliebige) der Detailansicht des Nachrichtentexts. Dies animiert die Sichtbarkeitsänderung der textView.

Verwandte Themen