2015-09-25 21 views
0

我的RecyclerView存在一些問題。我想添加一個泡泡小部件,用消息創建一個新的圈子(就像在messanger中一樣)。問題是泡泡必須放在單獨的XML佈局文件中,所以我不能將它添加到我的適配器中的「項目」佈局中。內部氣泡佈局我只是TextView,但我不想顯示普通文本 - 這太容易了;)我想顯示從API獲取的數據。另一個字 - 我需要訪問我的適配器中的Bubble佈局中的TextView。請幫忙! :)如何在RecyclerView中添加第二個佈局?

這裏是我的適配器類

package pl.krakowskascenamuzyczna.ksmcalendar.Adapter; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.util.Date; 
import org.joda.time.DateTime; 
import org.joda.time.DateTimeZone; 
import org.joda.time.Days; 
import org.w3c.dom.Text; 


import com.android.volley.VolleyError; 
import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 
import com.txusballesteros.bubbles.BubbleLayout; 
import com.txusballesteros.bubbles.BubblesManager; 

import java.net.URL; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Collections; 
import java.util.Date; 
import java.util.List; 

import pl.krakowskascenamuzyczna.ksmcalendar.Activities.CalendarActivity; 
import pl.krakowskascenamuzyczna.ksmcalendar.Activities.DisplayConcertActivity; 
import pl.krakowskascenamuzyczna.ksmcalendar.MySingleton; 
import pl.krakowskascenamuzyczna.ksmcalendar.R; 
import pl.krakowskascenamuzyczna.ksmcalendar.data.Concert; 
import pl.krakowskascenamuzyczna.ksmcalendar.data.Thumbnail; 


public class ConcertAdapter extends RecyclerView.Adapter<ConcertAdapter.MyViewHolder> { 


    private LayoutInflater inflater; 
    private Context context; 
    NetworkImageView mNetworkImageView; 
    private MySingleton mySingleton; 
    private List<Concert> concertList = new ArrayList(); 


    public ConcertAdapter(Context context, List<Concert> concerts) { 
     this.inflater = LayoutInflater.from(context); 
     this.concertList = concerts; 
     this.context = context; 

    } 

    public void setListConcert(ArrayList<Concert> concertList) { 
     this.concertList = concertList; 
     notifyItemRangeChanged(0, concertList.size()); 
    } 


    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = inflater.inflate(R.layout.concert_item, parent, false); 
     MyViewHolder holder = new MyViewHolder(view); 

     return holder; 

    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, int position) { 

     final float screenWidthPx = holder.itemView.getResources().getDisplayMetrics().widthPixels; 

     Concert current = concertList.get(position); 
     Log.d("mLog", current.getUrl()); 
     holder.image.setImageUrl(current.getUrl(), MySingleton.getInstance().getImageLoader()); 
     holder.image.getLayoutParams().height = (int) (screenWidthPx * 0.75); 

     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     Date concertDate = new Date(); 
     try { 
      concertDate = format.parse(current.getDate()); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     DateTime dt = new DateTime(); 
     DateTime currentDate = dt.withZone(DateTimeZone.forID("Europe/Warsaw")); 
     int days = Days.daysBetween(new DateTime(currentDate), new DateTime(concertDate)).getDays(); 
     holder.date_btn.setText(String.valueOf(days)); 

    } 

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

    public void showDisplay(int position){ 
     Intent intent = new Intent(context, DisplayConcertActivity.class); 
     intent.putExtra("position", position); 
     intent.putExtra("content", concertList.get(position).getContent()); 
     intent.putExtra("date", concertList.get(position).getDate()); 
     intent.putExtra("url", concertList.get(position).getUrl()); 
     context.startActivity(intent); 
    } 


    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     private NetworkImageView image; 
     private Button date_btn; 

     public MyViewHolder(View itemView) { 
      super(itemView); 
      image = (NetworkImageView) itemView.findViewById(R.id.concerts_niv); 
      date_btn = (Button) itemView.findViewById(R.id.date_btn); 
      image.setOnClickListener(this); 


     } 
     @Override 
     public void onClick(View v) {showDisplay(getAdapterPosition()); 

     } 
    } 


} 

這是我的泡泡佈局:

<com.txusballesteros.bubbles.BubbleLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/bubble_tv" 
     android:layout_width="70dp" 
     android:layout_height="70dp" 
     android:layout_gravity="center" 
     android:background="@drawable/profile_decorator" 
     android:scaleType="centerCrop" 
     android:src="@drawable/profile_decorator" 
     android:textColor="#fff" 
     /> 
</com.txusballesteros.bubbles.BubbleLayout> 
+0

爲什麼你需要將氣泡放置在單獨的XML佈局文件中?如果你將它添加到物品並以他的知名度來玩,它會更容易。 – Rami

+0

我知道它會容易得多,但氣泡文檔說它必須是佈局中的第一個視圖。當我將它添加到RelativeLayout應用程序內的itemView時崩潰了。 – Bartos

回答

0

你可以通過你的泡沫TextView作爲aprameter到適配器構造函數。

private TextView mBubbleTextView; 

public ConcertAdapter(Context context, List<Concert> concerts, TextView bubbleTextView) { 
     this.inflater = LayoutInflater.from(context); 
     this.concertList = concerts; 
     this.context = context; 
     this.mBubbleTextView = bubbleTextView; 

} 

現在你有泡沫TextView在適配器中,所以可以從任何方法更新。

+0

謝謝!你的解決方案非常棒!我現在在TextView上看到null了,但是我試着去處理它;) – Bartos

+0

不客氣! – Rami

相關問題