code : https://github.com/thana19/testCustomListView
1. New Project with Empty Activity
2. New layout “fragment_main”
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="Main Fragment" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
3. New Fragment “MainFragment”
public class MainFragment extends Fragment { public MainFragment() { super(); } public static MainFragment newInstance(){ MainFragment fragment = new MainFragment(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } @Override public void onStart() { super.onStart(); } @Override public void onStop() { super.onStop(); } /* * Save Instance State Here */ @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // Save Instance State here } /* * Restore Instance State Here */ @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (savedInstanceState != null) { // Restore Instance State here } } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); return rootView; } }
4. add FrameLayout in activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/contentContainer" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
5. add contentContainer in MainActivity
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.contentContainer, MainFragment.newInstance()) .commit(); } } }
6. add ListView
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="Main Fragment" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
7. ListView Custom Design
8. Create New Layout “main_list_item”
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="3dp" android:orientation="horizontal"> <ImageView android:id="@+id/imgView" android:layout_width="100dp" android:layout_height="160dp" android:scaleType="centerCrop" android:src="@drawable/p2" /> <LinearLayout android:layout_width="match_parent" android:layout_height="160dp" android:orientation="vertical" android:padding="10dp"> <TextView android:id="@+id/tvHeader" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Text Content Title" android:textSize="18sp" android:textStyle="bold" /> <TextView android:id="@+id/tvDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="13/6/2017" android:textSize="12sp" android:textStyle="italic" /> <TextView android:id="@+id/tvDetail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="@string/str1" /> </LinearLayout> </LinearLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="3dp" android:background="#E0E0E0" /> </LinearLayout>
9. Create New Class “MainListItem”
public class MainListItem extends FrameLayout { public MainListItem(@NonNull Context context) { super(context); initInflate(); initInstances(); } public MainListItem(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); initInflate(); initInstances(); initWithAttrs(attrs, 0, 0); } public MainListItem(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { super(context, attrs, defStyleAttr); initInflate(); initInstances(); initWithAttrs(attrs, defStyleAttr, 0); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public MainListItem(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); initInflate(); initInstances(); initWithAttrs(attrs, defStyleAttr, defStyleRes); } private void initInflate() { inflate(getContext(), R.layout.main_list_item, this); } private void initInstances() { // findViewById here } private void initWithAttrs(AttributeSet attrs, int defStyleAttr, int defStyleRes) { /* TypedArray a = getContext().getTheme().obtainStyledAttributes( attrs, R.styleable.StyleableName, defStyleAttr, defStyleRes); try { } finally { a.recycle(); } */ } }
10. Create New Class “MainListAdapter”
public class MainListAdapter extends BaseAdapter { @Override public int getCount() { return 10; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { MainListItem item; if (view != null) item = (MainListItem) view; else item = new MainListItem(viewGroup.getContext()); return item; } }
11. Add findViewById in “MainFragment”
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); ListView listView = (ListView) rootView.findViewById(R.id.listView); MainListAdapter listAdapter = new MainListAdapter(); listView.setAdapter(listAdapter); return rootView; }
(Visited 111 times, 1 visits today)