2017-07-11 1 views
-5

Ich benutze benutzerdefinierte Adapter für meine ListView, und ich möchte die TextView mit benutzerdefinierten Schriftart. Listenansicht in Fragment ist: todolist_fragment.xmlbenutzerdefinierte Schriftart in 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

public class toDoListFragment Fragment reicht {

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; 
} 

}

so erstellt I 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; 
} 

}

und das Layout "list_view_item_row.xml" ist das Layout mit dem Imageview Checkbox und der Textview-Artikel:

<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

Ich legte die benutzerdefinierte Schriftart manuell ... wie folgt:

TextView textView; 
    textView = rootView.findViewById(R.id.text1); 
    Typeface customFontBold = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Assistant-Bold.ttf"); 
    textView.setTypeface(customFontBold); 

wo kann ich die benutzerdefinierte Schriftart festlegen? Danke.

+1

Offensichtlich an der Stelle, wenn Sie die Ansicht aufblasen – Selvin

+0

@Selvin Ich versuchte dies natürlich, aber ich kann nicht die "getActivity()" verwenden. – morkuk

+0

Und? Alles, was Sie brauchen, ist Context .... Und Context ist überall ... Fx check View Dokumentation ... Rate was, Sie können Context von ihm bekommen ... – Selvin

Antwort

0

ich akhilesh0707 Antwort verwendet, aber ich änderte es.

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

Dank akhilesh0707.

0

in der Klasse Änderungen versuchen, diese

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

Ich habe das versucht, aber ich kann getActivity() dort nicht verwenden ... – morkuk

+0

können Sie den Kontext im Konstruktor übergeben – akhilesh0707

Verwandte Themen