2011-12-07 8 views
1

私はforum-ishアプリを構築しており、forumpostsを階層的に表示する必要があります。それぞれのforumpostには独自のオブジェクトがあり、このオブジェクトには、その親に関連する位置を定義するために使用される(int)深さ変数が含まれています。Androidで階層的なlistFragmentを作成する

私はBroadcastRecieverを持っています。このBroadcastRecieverはデータを取り込み、そのデータに基づいてlistadapterを設定します。 私の計画は今、getListAdapter()を使用していました。getChildAt(position).setLeft(pixels);しかし、私はsetLeftメソッドでnullpointerexceptionを取得します。このための私のコードは次のとおりです。

  @Override 
     public void onReceive(Context context, Intent intent) { 
      String jsonEmner = intent 
        .getStringExtra(RestService.PARAM_OUT_MSG); 
      emner = gson.fromJson(jsonEmner, EmneItem[].class); 
      Log.e(this.getClass().getSimpleName(), jsonEmner); 
      populateEmner(); 

      int firstID = getListView().getFirstVisiblePosition(); 
      int listSize = getListView().getCount(); 

      for (int count = firstID; count < listSize; count++) { 
       EmneItem e = (EmneItem) getListView().getItemAtPosition(count); 
       getListView().getChildAt(count).setLeft(e.getDepth()); 
      } 
     } 

このコードはListFragmentクラスの内部BroadCastRecieverメソッドの内部にあります。私は誰かが正しい方向に私にこのことをする方法を教えてくれることを願っていました:)

答えて

1

私は自分の疑問に答えるのはちょっと愚かですが、誰かが同様の状況に陥った場合の対処方法を見つけることができました。

独自のカスタムArrayAdapterと、行のレイアウトを定義するXMLファイルを作成しました。 ArrayAdapterには、各エントリをカスタマイズできるgetView()メソッドがあり、エントリの「深さ」変数に基づいて、Textviews LayoutParamsを設定します。

誰がどのようにそのが行わ見たい場合:これは主に私がhttp://commonsware.com/Android/excerpt.pdf

乾杯

で発見の記事に基づいています

class CustomAdapter extends ArrayAdapter<EmneItem> { 
     CustomAdapter() { 
      super(getActivity(), R.layout.row, emner); 
     } 

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

      //Reusing convertView if possible, if not then inflating a new 
      if(row == null) { 
       LayoutInflater inflater = getActivity().getLayoutInflater(); 
       row = inflater.inflate(R.layout.row, parent, false); 
      } 

      TextView postedby = (TextView) row.findViewById(R.id.postedbytextview); 
      postedby.setText("Posted by: " + emner[position].getPosted_by()); 

      TextView argument = (TextView) row.findViewById(R.id.argumentTextView); 
      argument.setText(emner[position].getArgument()); 

      TextView procontratextview = (TextView) row.findViewById(R.id.procontratextview); 
      int procontra = emner[position].getProcontra(); 
      if (procontra == EmneItem.PRO) { 
       procontratextview.setText("PRO"); 
      } 
      if (procontra == EmneItem.CONTRA) { 
       procontratextview.setText("CONTRA"); 
      } 

      LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

      if(emner[position].getDepth() == 1) { 
       llp.setMargins(10, 0, 0, 0); 
        procontratextview.setLayoutParams(llp); 
        argument.setLayoutParams(llp); 
      } else if (emner[position].getDepth() == 2) { 
        llp.setMargins(20, 0, 0, 0); 
        procontratextview.setLayoutParams(llp); 
        argument.setLayoutParams(llp); 
      } else if (emner[position].getDepth() == 3) { 
       llp.setMargins(30, 0, 0, 0); 
        procontratextview.setLayoutParams(llp); 
        argument.setLayoutParams(llp); 
      } else if (emner[position].getDepth() >= 4) { 
       llp.setMargins(40, 0, 0, 0); 
        procontratextview.setLayoutParams(llp); 
        argument.setLayoutParams(llp); 
      } 
      return (row); 
     } 
    } 

関連する問題