2016-07-15 6 views
0

私は、名前と価格のパッケージのリストを表示するアプリケーションに取り組んでいます。すべてのデータ[パッケージの名前と価格]はserver.nowから来ています。価格が0のパッケージを表示したくないのですが...リストビューの作成時に表示されているリストアイテムを停止する方法はありますか?

私のカスタムアダプタのgetview ...

if(packagelist.get(position).getPrice()==0) 
       { 
        return null; 
       } 

しかし、アプリケーションがクラッシュしたとして働いていません()getViewメソッドにnullを返します。任意の解決策はありますか?

LogCat出力...

E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.cakenkeyboard.appoinment, PID: 18099 
    java.lang.NullPointerException 
     at android.widget.AbsListView.obtainView(AbsListView.java:2277) 
     at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
     at android.widget.ListView.onMeasure(ListView.java:1175) 
     at android.view.View.measure(View.java:16514) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5129) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
     at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1052) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:590) 
     at android.view.View.measure(View.java:16514) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
     at android.view.View.measure(View.java:16514) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5129) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
     at android.view.View.measure(View.java:16514) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
     at android.view.View.measure(View.java:16514) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5129) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
     at android.view.View.measure(View.java:16514) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5129) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
     at android.view.View.measure(View.java:16514) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5129) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
     at android.view.View.measure(View.java:16514) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5129) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
     at android.view.View.measure(View.java:16514) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5129) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2305) 
     at android.view.View.measure(View.java:16514) 
     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912) 
     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
     at android.view.Choreographer.doFrame(Choreographer.java:544) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5095) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
     at dalvik.system.NativeStart.main(Native Method) 

編集を助けてください。私のアプリケーションで は、すべてのパッケージは2つの価格を持っています。ユーザーが特定のラジオボタンを選択すると、選択されたラジオボタンに従って、アダプタのupdateResult()メソッドを使用してリスト全体を更新しています。私は両方の価格を単一のBeanクラスに保存しました。

これは、これは私のカスタムアダプタです

public class PackageData implements Serializable{ 
private int price1,price2; 
private String package_name; 
private int id; 
private boolean isSelected; 

public PackageData(int id, int price1, int price2, String package_name) { 
    this.id = id; 
    this.price1 = price1; 
    this.price2 = price2; 
    this.package_name = package_name; 
    isSelected = false; 
} 

public int getId() 
{ 
    return id; 
} 

public void setId(int id) 
{ 
    this.id = id; 
} 

public int getPrice1() { 
    return price1; 
} 

public void setPrice1(int price1) { 
    this.price1 = price1; 
} 

public int getPrice2() { 
    return price2; 
} 

public void setPrice2(int price2) { 
    this.price2 = price2; 
} 

public String getPackage_name() { 
    return package_name; 
} 

public void setPackage_name(String package_name) { 
    this.package_name = package_name; 
} 



public void setSelectionFlag(boolean isSelected) 
{ 
    this.isSelected = isSelected; 
} 

public boolean getSelectionflag() 
{ 
    return this.isSelected; 
}} 

...特定のパッケージのデータを格納し、私のBeanクラスです....

public class PackageRowAdapter extends BaseAdapter { 

private Context ctx; 
private LayoutInflater inflater; 
private List<PackageData> packagelist; 
boolean isPrice1; 

public PackageRowAdapter(Context ctx, List<PackageData> packagelist) 
{ 
    this.ctx = ctx; 
    this.packagelist = packagelist; 
    isPrice1 = true; 

} 

public class Viewholder { 

    CheckBox chkbox; 
    TextView lblprice; 

    public Viewholder(View v) 
    { 
     this.chkbox = (CheckBox) v.findViewById(R.id.package_row_chkbox); 
     this.lblprice = (TextView) v.findViewById(R.id.package_row_price); 
    } 
} 

@Override 
public int getCount() { 
    return packagelist.size(); 
} 

@Override 
public Object getItem(int i) { 
    return packagelist.get(i); 
} 

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

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

    // getting package data for the row 
    PackageData currentPackage = packagelist.get(position); 

    TextView lbltitle; 
    Viewholder holder = null; 


    if (inflater == null) { 
     inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 


    if (convertView == null) 
     { 
      convertView = inflater.inflate(R.layout.row_package, parent, false); 

      //Binding UI elements with JAVA Objects.... 
      holder = new Viewholder(convertView); 
      lbltitle = (TextView) convertView.findViewById(R.id.package_row_title); 

      //setting recieved data into UI elements 
      lbltitle.setText(currentPackage.getPackage_name()); 

      holder.chkbox.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        set_Checkbox(view); 

       } 
      }); 


      convertView.setTag(holder); 


     } 
    else 
     { 
      holder = (Viewholder) convertView.getTag(); 
     } 


    holder.chkbox.setChecked(currentPackage.getSelectionflag()); 

    if(isPrice1) 
     { 
      holder.lblprice.setText(currentPackage.getPrice1() + " Rs."); 
      if(packagelist.get(position).getPrice1()==0) 
       { 
        return null; 
       } 
     } 
    else 
     { 
      holder.lblprice.setText(currentPackage.getPrice2() + " Rs."); 
      if(packagelist.get(position).getPrice2()==0) 
      { 
       return null; 
      } 
     } 


    holder.chkbox.setTag(position); 


    return convertView; 

}//End of getView() 

    public void updateResult(Boolean isPrice1) 
    { 
     this.isPrice1 = isPrice1; 

     //Triggers the list update 
     notifyDataSetChanged(); 
    } 

    public void set_Checkbox(View view) 
    { 
     CheckBox v = (CheckBox) view; 

     int temp_position =(Integer)v.getTag(); 
     Log.w("Position Value",""+temp_position + " checked = " + ((CheckBox) view).isChecked()); 

     PackageData temp_package = packagelist.get(temp_position); 

     temp_package.setSelectionFlag(v.isChecked()); 
    }} 
+0

なぜアプリケーションがクラッシュするのですか?あなたのlogcatのメイト – basic

+1

を公開して、getViewであなたのビューが見えなくなったら – Pavya

+0

リストを作成している間に値がゼロより小さいパッケージを無視できますか? –

答えて

0

あなたはおそらく最初のパッケージを格納する必要があり、 0ですべてを整理し、それらをリストに送ります。

+0

仲間に感謝...私も最初に考えましたが、私のアプリケーションでは、すべてのパッケージに2つの価格があります。ユーザーが特定のラジオボタンを選択すると、アダプタのupdateResult()メソッドを使用してリスト全体を更新しています。price2が0でなくprice1がそのパッケージの0であればどうなりますか?それは表示されません....それは要件ではありません... – Intimate

1
ArrayList packageList; 
ArrayList newList; 

for(int position=0; position <packageList.size() ; position) 
{ 
if(packagelist.get(position).getPrice()!=0) 
newList.add(packagelist.get(position));  
// new list will not contain PRICE==0 

} 

packageListではなくlistviewにnewListを渡します。私はそれが仕事をすると思います。リストビューにだけ渡す前

+0

これは、無駄なスペースを占める空白のビューを残します。 –

+0

私はビューを返します...リストにビューを表示します。私は表示されているビューを停止したい、空のビューを表示しないように...... tnx bydway ... – Intimate

+0

@ WadeWilson、そうだった、この新しいコードを試してみてください – Shivam

0

最善の解決策は、あなたが表示したい項目をリストに追加され、リストビューに

0
if(packagelist.get(position).getPrice()!=0) 
      { 
       textView.setText(""+ packagelist.get(position).getPrice()) // or any code you want when PRICE!=0 
      } 
else{ 
textView.setText(""); // Or any other value you want to display when value is 0 
} 

try this 
0

をそのリストを渡し、値> 0とを有しているだけで一つの新しいリストや店舗のデータを作成します。目的の時刻に表示するビューをプログラマチックに追加するか、2つのデータセットと、表示する内容に基づいて2つのデータセットを切り替えるフラグを持つカスタムアダプターを使用できます。

更新:

A別のソリューションを使用すると、リストの最後にない限り、特別な状況下であった、と常に表示された項目のインデックスとへの参照を保持したくない項目を追加することです特別な状況の下でアイテムを表示します。これには、カウント変数を同期させた状態で特別な注意が必要であり、アイテムをカスタム注文、つまり常に表示されているアイテムや特別な状況のアイテム以外に表示されないようにする効果があります。少なくとも特別なソートロジックはありません。

関連する問題