2017-07-11 16 views
-5

私はlistViewにカスタムアダプタを使用しています。カスタムフォントでtextViewを作成したいと思います。 リストビューがフラグメントである:customAdapterのカスタムフォント

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
> 

<ListView 
    android:id="@+id/checkable_list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 

todolistfragment.java

パブリッククラスtoDoListFragmentフラグメントを拡張 todolist_fragment.xml {

ListView checkableList; 
Button showSelectedButton; 

List<itemsModel> itemsList; 

public toDoListFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_todolist, container, false); 

    checkableList = rootView.findViewById(R.id.checkable_list); 

    itemsList = new ArrayList<>(); 
    itemsList.add(new itemsModel(false, "item1")); 
    itemsList.add(new itemsModel(false, "item2")); 
    itemsList.add(new itemsModel(false, "item3")); 
    itemsList.add(new itemsModel(false, "item4")); 
    itemsList.add(new itemsModel(false, "item5")); 
    itemsList.add(new itemsModel(false, "item6")); 
    itemsList.add(new itemsModel(false, "item7")); 

    final customList adapter = new customList(getActivity(), itemsList); 

    checkableList.setAdapter(adapter); 

    checkableList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      itemsModel model = itemsList.get(i); 

      if(model.isSelected()) 
       model.setSelected(false); 
      else 
       model.setSelected(true); 

      itemsList.set(i, model); 

      adapter.updateRecords(itemsList); 
     } 
    }); 


    return rootView; 
} 

}

は私は作成しましたcustomList.java:

public class customList extends BaseAdapter { 

Activity activity; 
List<itemsModel> itemsList; 
LayoutInflater inflater; 

public customList(Activity activity) { 
    this.activity = activity; 
} 

public customList(Activity activity, List<itemsModel> itemsList) { 
    this.activity = activity; 
    this.itemsList = itemsList; 

    inflater = activity.getLayoutInflater(); 
} 

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

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

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

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 
    ViewHolder holder = null; 
    if(view == null){ 
     view = inflater.inflate(R.layout.list_view_item_row, viewGroup, false); 

     holder = new ViewHolder(); 

     holder.itemText = view.findViewById(R.id.itemName); 
     holder.checkBox = view.findViewById(R.id.checkboxIcon); 

     view.setTag(holder); 
    }else 
     holder = (ViewHolder) view.getTag(); 

    itemsModel model = itemsList.get(i); 

    holder.itemText.setText(model.getItemsList()); 

    if(model.isSelected()) 
     holder.checkBox.setBackgroundResource(R.drawable.checked); 

    else 
     holder.checkBox.setBackgroundResource(R.drawable.check); 

    return view; 
} 

public void updateRecords(List<itemsModel> itemsList){ 
    this.itemsList = itemsList; 

    notifyDataSetChanged(); 
} 

class ViewHolder{ 
    TextView itemText; 
    ImageView checkBox; 
} 

}

とレイアウト "list_view_item_row.xml" ImageViewのチェックボックスとのTextView項目とレイアウトである:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="?android:attr/activatedBackgroundIndicator" 
android:minHeight="?android:attr/listPreferredItemHeightSmall" 
android:padding="5dp" > 

<ImageView 
    android:id="@+id/checkboxIcon" 
    android:layout_width="25dp" 
    android:layout_height="25dp" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_marginRight="10dp" 
    android:layout_marginEnd="10dp" 
    android:layout_centerVertical="true" 
    android:background="@drawable/check"/> 


<TextView 
    android:id="@+id/itemName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_toLeftOf="@+id/checkboxIcon" 
    android:layout_toStartOf="@+id/checkboxIcon" 
    android:padding="10dp" 
    android:text="Item Name" 
    android:textColor="@android:color/black" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    /> 

enter image description here

私はカスタムフォントを手動で設定しました...このように:

私はカスタムフォントを設定できますか? ありがとうございます。クラスの

+1

明らかに、あなたがビューを膨らませているところで – Selvin

+0

@Selvin私はこれを試しましたが、もちろん、私は "getActivity()"を使うことはできません。 – morkuk

+0

そして?必要なのはコンテキストだけです...そしてコンテキストはどこにでもあります... Fx checkドキュメントを見る...あなたがコンテキストを得ることができると思います... – Selvin

答えて

0

私はakhilesh0707答えを使用し、私はそれを変更してみてください。

ありがとうございましたakhilesh0707。

0

行われた変更は、この

public class customList extends BaseAdapter { 
     Activity activity; 
     List<itemsModel> itemsList; 
     LayoutInflater inflater; 
     private Typeface customFontBold; 
     public customList(Activity activity) { 
      this.activity = activity; 
     } 

     public customList(Activity activity, List<itemsModel> itemsList) { 
      this.activity = activity; 
      this.itemsList = itemsList; 
      inflater = activity.getLayoutInflater(); 
      customFontBold = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Assistant-Bold.ttf"); 
     } 

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

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

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

     @Override 
     public View getView(int i, View view, ViewGroup viewGroup) { 
      ViewHolder holder = null; 
      if (view == null) { 
       view = inflater.inflate(R.layout.list_view_item_row, viewGroup, false); 

       holder = new ViewHolder(); 

       holder.itemText = view.findViewById(R.id.itemName); 
       holder.checkBox = view.findViewById(R.id.checkboxIcon); 
       holder.itemText.setTypeface(customFontBold); 
       view.setTag(holder); 
      } else 
       holder = (ViewHolder) view.getTag(); 

      itemsModel model = itemsList.get(i); 

      holder.itemText.setText(model.getItemsList()); 

      if (model.isSelected()) 
       holder.checkBox.setBackgroundResource(R.drawable.checked); 

      else 
       holder.checkBox.setBackgroundResource(R.drawable.check); 

      return view; 
     } 

     public void updateRecords(List<itemsModel> itemsList) { 
      this.itemsList = itemsList; 

      notifyDataSetChanged(); 
     } 

     class ViewHolder { 
      TextView itemText; 
      ImageView checkBox; 
     } 
    } 
+0

私はこれを試しましたが、getActivity()を使用できません... – morkuk

+0

コンストラクタ内でコンテキストを渡すことができます – akhilesh0707

関連する問題