Android的setvisibility在列表视图按钮 [英] android setvisibility for button in listview
问题描述
我解析片段内JSON网址,并把数据放到一个ListView。
对于每一个元素,我有id为Button1的一个隐藏按钮,你可以在我的XML布局看。
<?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=http://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.movieItems = 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屋!