Android的setvisibility在列表视图按钮 [英] android setvisibility for button in listview

查看:209
本文介绍了Android的setvisibility在列表视图按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我解析片段内JSON网址,并把数据放到一个ListView。
对于每一个元素,我有id为Button1的一个隐藏按钮,你可以在我的XML布局看。

 <?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:背景=@绘制/ LER
    >    <! - 缩略图 - >
    < com.android.volley.toolbox.NetworkImageView
        机器人:ID =@ + ID /缩略图
        机器人:layout_width =100dp
        机器人:layout_height =100dp
        机器人:layout_alignParentLeft =真
        机器人:layout_marginRight =8DP/>    <! - 电影标题 - >
    <的TextView
        机器人:ID =@ + ID /标题
        机器人:paddingTop =40dip
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignTop =@ + ID /缩略图
        机器人:layout_toRightOf =@ + ID /缩略图
        机器人:TEXTSIZE =@扪/标题
        机器人:文字颜色=@彩色/ bastru
        机器人:文字样式=大胆/>
    <的TextView
        机器人:ID =@ + ID / DESC
        机器人:layout_below =@ + ID /标题
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_toRightOf =@ + ID /缩略图        机器人:TEXTSIZE =@扪/递减/>    <按钮
        机器人:ID =@ + ID /按钮1
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=Věžíinregistrari
        机器人:layout_toRightOf =@ + ID /缩略图
        机器人:layout_below =@ + ID / DESC
        机器人:知名度=隐形/>
    <的TextView
        机器人:ID =@ + ID /链接
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignTop =@ + ID /缩略图
        机器人:layout_toRightOf =@ + ID /缩略图
        机器人:TEXTSIZE =@扪/标题
        机器人:文字样式=大胆
        机器人:知名度=水涨船高/>    <的TextView
        机器人:ID =@ + ID / C和
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignTop =@ + ID /缩略图
        机器人:layout_toRightOf =@ + ID /缩略图
        机器人:TEXTSIZE =@扪/ DESC
        机器人:文字颜色=@彩色/佛得角
        机器人:layout_marginBottom =10dp
        机器人:layout_marginTop =5DP
        />
< / RelativeLayout的>

现在,对于每一个JSON元素我已经称为条目录音,它具有价值是或否。如果值为是的,它必须设置按钮的特定行可见。

 的for(int i = 0; I< response.length();我++){
      尝试{
          JSONObject的OBJ = response.getJSONObject(I)
          惠电影=新的EMI();          如果(obj.getString(记录)。等于(是)){
              按钮B =(按钮)getView()findViewById(R.id.button1)。
              b.setVisibility(View.VISIBLE);
          }
      movie.setTitle(obj.getString(Titlu));
      movie.setDesc(obj.getString(Descriere));
      movie.setCand(obj.getString(资讯));
      movie.setThumbnailUrl(obj.getString(PozaModerator));
      movie.setLink(obj.getString(iurl));
      //添加电影电影阵列
      movieList.add(电影);
      。
      。
      。

但应用程序总是与此错误崩溃:

  11月8日至25日:44:48.615 10248-10248 / com.testapp.aacplay E / AndroidRuntime:致命异常:主要
    显示java.lang.NullPointerException
            在com.testapp.aacplay.Emisiuni $ 2.onResponse(Emisiuni.java:105)
            在com.testapp.aacplay.Emisiuni $ 2.onResponse(Emisiuni.java:88)
            在com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65)
            在com.android.volley.ExecutorDelivery $ ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
            在android.os.Handler.handleCallback(Handler.java:725)
            在android.os.Handler.dispatchMessage(Handler.java:92)
            在android.os.Looper.loop(Looper.java:137)
            在android.app.ActivityThread.main(ActivityThread.java:5227)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:511)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:795)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
            在dalvik.system.NativeStart.main(本机方法)

这是code适配器:

 公共类EmisiuniAdapter延伸BaseAdapter {
    私人活动活动;
    私人LayoutInflater吹气;
    私人列表或其可药用盐> movieItems;
    ImageLoader的ImageLoader的= AppController.getInstance()getImageLoader()。    公共EmisiuniAdapter(活动活动,列表或其可药用盐> movieItems){
        this.activity =活动;
        this.movi​​eItems = movieItems;
    }
    公众诠释的getCount(){
        返回movieItems.size();
    }
    公共对象的getItem(INT位置){
        返回movieItems.get(位置);
    }    众长getItemId(INT位置){
        返回的位置;
    }
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){        如果(吹气== NULL)
            吹气=(LayoutInflater)活动
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        如果(convertView == NULL)
            convertView = inflater.inflate(R.layout.list_emisiuni,NULL);        如果(ImageLoader的== NULL)
            ImageLoader的= AppController.getInstance()getImageLoader()。
        NetworkImageView缩略图=(NetworkImageView)convertView
                .findViewById(R.id.thumbnail);
        TextView的标题=(TextView中)convertView.findViewById(R.id.title);
        TextView的链接=(TextView中)convertView.findViewById(R.id.link);
        TextView的DESC =(TextView中)convertView.findViewById(R.id.desc);
        TextView的C和=(TextView中)convertView.findViewById(R.id.cand);        //获取电影数据的行
        惠M = movieItems.get(位置);        //缩略图
        thumbNail.setImageUrl(m.getThumbnailUrl(),ImageLoader的);        //称号
        title.setText(m.getTitle());        link.setText(m.getLink());
        desc.setText(m.getDesc());
        cand.setText(m.getCand());
        返回convertView;
    }}


解决方案

在惠

 字符串记录;
公共字符串getRecording(){
    返回记录;
}公共无效setRecording(字符串录音){
    this.recording =记录;
}

在for循环

 如果(obj.getString(记录)。等于(是)){
         movie.setRecording(是);
   }其他{
         movie.setRecording(否);
   }

删除此

 按钮B =(按钮)getView()findViewById(R.id.button1)。
  b.setVisibility(View.VISIBLE);

然后在适配器getView

 按钮B =(按钮)convertView.findViewById(R.id.button1);
  如果(m.getRecording()。等于(是))
  b.setVisibility(View.VISIBLE);
  其他
  b.setVisibility(View.INVISIBLE);

此外,你应该使用ViewHolder模式

http://developer.android.com/training/improving-布局/平滑scrolling.html

I am parsing a json url inside a fragment and put the data into a listview. For each element i have a hidden button with id button1 as you can see in my xml layout.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/ler"
    >

    <!-- Thumbnail Image -->
    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/thumbnail"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="8dp"/>

    <!-- Movie Title -->
    <TextView
        android:id="@+id/title"
        android:paddingTop="40dip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:textSize="@dimen/title"
        android:textColor="@color/bastru"
        android:textStyle="bold" />
    <TextView
        android:id="@+id/desc"
        android:layout_below="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/thumbnail"

        android:textSize="@dimen/desc"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Vezi inregistrari"
        android:layout_toRightOf="@+id/thumbnail"
        android:layout_below="@+id/desc"
        android:visibility="invisible"/>
    <TextView
        android:id="@+id/link"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:textSize="@dimen/title"
        android:textStyle="bold"
        android:visibility="gone"/>

    <TextView
        android:id="@+id/cand"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:textSize="@dimen/desc"
        android:textColor="@color/verde"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="5dp"
        />


</RelativeLayout>

Now, for every json element i have an entry called "Recordings" which has value Yes or No. If the value is Yes, it must set the button for the specific row visible.

  for (int i = 0; i < response.length(); i++) {
      try {
          JSONObject obj = response.getJSONObject(i);
          Emi movie = new Emi();

          if (obj.getString("Recordings").equals("Yes")) {
              Button b = (Button) getView().findViewById(R.id.button1);
              b.setVisibility(View.VISIBLE);
          }
      movie.setTitle(obj.getString("Titlu"));
      movie.setDesc(obj.getString("Descriere"));
      movie.setCand(obj.getString("Detalii"));
      movie.setThumbnailUrl(obj.getString("PozaModerator"));
      movie.setLink(obj.getString("iurl"));
      // adding movie to movies array
      movieList.add(movie);
      .
      .
      .

But the app always crashes with this error:

08-25 11:44:48.615  10248-10248/com.testapp.aacplay E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.testapp.aacplay.Emisiuni$2.onResponse(Emisiuni.java:105)
            at com.testapp.aacplay.Emisiuni$2.onResponse(Emisiuni.java:88)
            at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65)
            at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5227)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
            at dalvik.system.NativeStart.main(Native Method)

And this is the code for the adapter:

public class EmisiuniAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<Emi> movieItems;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public EmisiuniAdapter(Activity activity, List<Emi> movieItems) {
        this.activity = activity;
        this.movieItems = movieItems;
    }


    public int getCount() {
        return movieItems.size();
    }


    public Object getItem(int location) {
        return movieItems.get(location);
    }

    public long getItemId(int position) {
        return position;
    }


    public View getView(int position, View convertView, ViewGroup parent) {

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.list_emisiuni, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
        NetworkImageView thumbNail = (NetworkImageView) convertView
                .findViewById(R.id.thumbnail);
        TextView title = (TextView) convertView.findViewById(R.id.title);
        TextView link = (TextView) convertView.findViewById(R.id.link);
        TextView desc = (TextView) convertView.findViewById(R.id.desc);
        TextView cand = (TextView) convertView.findViewById(R.id.cand);



        // getting movie data for the row
        Emi m = movieItems.get(position);

        // thumbnail image
        thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);

        // title
        title.setText(m.getTitle());

        link.setText(m.getLink());
        desc.setText(m.getDesc());
        cand.setText(m.getCand());
        return convertView;
    }

}

解决方案

In Emi

String recording;
public String getRecording() {
    return recording;
}

public void setRecording(String recording) {
    this.recording = recording;
}

In the for loop

   if (obj.getString("Recordings").equals("Yes")) {
         movie.setRecording("Yes");
   }else{
         movie.setRecording("No");
   }

Remove this

  Button b = (Button) getView().findViewById(R.id.button1);
  b.setVisibility(View.VISIBLE);

Then in adapter getView

  Button b = (Button) convertView.findViewById(R.id.button1);
  if(m.getRecording().equals("Yes"))
  b.setVisibility(View.VISIBLE);
  else
  b.setVisibility(View.INVISIBLE);

Also you should use a ViewHolder pattern

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

这篇关于Android的setvisibility在列表视图按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆