-1

我正在实现一个地图片段上的卡片视图,因此在实现它时,我使用了两个子类来扩展视图持有者class.so当我打电话给.setText()方法从主类的构造函数的子类之一的文本查看其返回null我知道它由于它不能访问,但如何解决这个问题。这范围是代码在适配器类中返回null的setText()方法

public class Adap1 extends RecyclerView.Adapter<Adap1.ViewHolder> { 

    String a121[] = new String[10]; 
    RecyclerView recyclerView; 
    RecyclerView.LayoutManager layoutManager; 
    RecyclerView.Adapter adapter; 
    FloatingActionButton a1s, a2s, a3s; 
    TextView ajk; 
    public static final int WeatherVe = 0; 
    public static final int ChronoVe = 1; 
    int jh=0,moj=0; 
    double lat1,lat2,lon1,lon2,degree,s1,speed,l1,l2,lat,lon; 


    public Adap1(String a121[]) 
    { 
     this.a121 = a121; 
    } 


    public Adap1(double l1,double l2,double lat1,double lat2) 
    { 
     this.l1=l1; 
     this.lat1=lat1; 
     this.l2=l2; 
     this.lat2=lat2; 
     s1 = getDistanceFromLatLonInKm(l1, l2, lat1, lat2); 
     System.out.println(l1+" "+l2); 
     System.out.println(lat1+""+lat2); 
     speed=s1%(0.0019); 
     ajk.setText(d);//error is coming here when i am accesing text view of clima class 
    } 
    public static class ViewHolder extends RecyclerView.ViewHolder 
    { 
     public ViewHolder(View v) 
     { 
      super(v); 
     } 
    } 
    public class WeatherVe extends ViewHolder { 
     public TextView itemTitle; 
     ImageView acv; 
     public TextView itemg; 
     public WeatherVe(View v) 
     { 
      super(v); 
      itemTitle = (TextView) v.findViewById(R.id.ass); 
      itemg = (TextView) v.findViewById(R.id.ass1); 
     } 
    } 
    public class Clima extends ViewHolder 
    { 
     public Clima(View v) 
     { 
      super(v); 
      a1s = (FloatingActionButton) v.findViewById(R.id.as); 
      a2s = (FloatingActionButton) v.findViewById(R.id.as1); 
      ajk=(TextView)v.findViewById(R.id.olx); 
      System.out.println(ajk); 
      System.out.println("Initialization"); 
     } 
    } 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    { 
     View v; 
     if (viewType == WeatherVe) { 
      v = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.card_lay12, parent, false); 
      return new WeatherVe(v); 
     } 
     else 
     { 
      v = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.card123, parent, false); 
      return new Clima(v); 
     } 
    } 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) 
    { 
     if (holder.getItemViewType() == WeatherVe) { 
      WeatherVe hsolder = (WeatherVe) holder; 
      hsolder.itemTitle.setText(a121[position]); 
      avd = hsolder.itemTitle.getContext(); 
      hsolder.itemg.setText(a121[position + 1]); 
     } else if(holder.getItemViewType()==ChronoVe) 
     { 
      Clima hags = (Clima) holder; 
     } 
     else 
     { 
     } 
    } 
    } 

在它正在显示

尝试在空 调用虚拟方法无效android.widget.TextView.setText(java.lang.CharSequence中)object`参考

请告诉我如何从constructor.Thanks存取权限的文本视图提前!!

+0

这是因为您的输入数据为空,并且您在textview中设置了该值。放入日志以检查是否有一些值重新调整。 –

+0

我没有正确的看看你的代码,所以你会更好地了解所有的细节,但无论如何'ajk =(TextView)v.findViewById(R.id.olx);'需要在' ajk.setText(d);'。否则,你会得到这个'NullPointerException'。 (一个正确的答案需要仔细查看代码。) –

+0

该方法没有返回任何东西。 SetText是一个无效的方法... –

回答

0

从适配器的构造函数中删除它。

ajk.setText(d); 

这是不是通向哪里(因为观点显然是空在那里,你不能在这一点上它分配)。同时从适配器类中删除textview的成员变量。这没有必要。

注意这些行?

WeatherVe hsolder = (WeatherVe) holder; 
hsolder.itemTitle.setText(a121[position]); 
avd = hsolder.itemTitle.getContext(); 
hsolder.itemg.setText(a121[position + 1]); 

看起来类似于你想要做的,是吗?

设置Clima hags持有人有文本您移动的TextView后进入的Clima类


此外,适配器竟然一无所知这些,所以删除这些以及

RecyclerView recyclerView; 
RecyclerView.LayoutManager layoutManager; 
RecyclerView.Adapter adapter; 

我建议你阅读约heterogeneous views in a RecyclerView因为这就是你所拥有的

+0

如果我想打印文本一次我会使用**。setText()**方法在onBindView持有人,但我会更新该文本每5秒更具体的onLocationChanged()在其他类中的方法将通过构造函数每5秒发送一次值到适配器类 –

+0

听起来像那个textview不应该在适配器中,然后,但在ListView之外的是 –

+0

是的,而不是将该文本视图放入卡片中布局我将把它放在其他布局,这将解决问题 –