I created a dynamic LinearLayout, and I want to add these layouts to the ListView. The code is as follows:
DynamicLayout Code:
import android.content.Context; import android.widget.LinearLayout; import android.widget.TextView; public class DynamicContentLayout extends LinearLayout{ private Context context; private int linearLayoutMargin; public DynamicContentLayout(Context context) { super(context); this.context = context; linearLayoutMargin = (int) context.getResources().getDimension(R.dimen.xlarge_margin_padding_fixed); initViews(); } private void initViews() { LinearLayout.LayoutParams layout_lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); layout_lp.setMargins(linearLayoutMargin, linearLayoutMargin, linearLayoutMargin, linearLayoutMargin); this.setLayoutParams(layout_lp); this.setOrientation(LinearLayout.VERTICAL); this.addView(headerTitle("My Text")); } private TextView headerTitle(String title) { TextView txtView = new TextView(context); txtView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); txtView.setPadding(6, 6, 6, 6); txtView.setText(title); txtView.setBackgroundColor(context.getResources().getColor(R.color.red)); txtView.setTextColor(context.getResources().getColor(R.color.white)); return txtView; } }
ListAdpaterCode:
import java.util.ArrayList; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; public class ListViewAdapter extends ArrayAdapter<DynamicContentLayout> { private Context context; private ArrayList<DynamicContentLayout> layoutList = null; public ListViewAdapter(Context context, int textViewResourceId, ArrayList<DynamicContentLayout> layoutList) { super(context, textViewResourceId, layoutList); this.context = context; this.layoutList = layoutList; } @Override public int getCount() { return layoutList.size(); } @Override public DynamicContentLayout getItem(int position){ return layoutList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { DynamicContentLayout entry = (DynamicContentLayout) layoutList.get(position); convertView = (View) entry; return convertView; } }
Finally, the code in MainActivity, where I install the adapter:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.listView); ArrayList<DynamicContentLayout> contents = new ArrayList<DynamicContentLayout>(); contents.add(new DynamicContentLayout(getApplicationContext())); contents.add(new DynamicContentLayout(getApplicationContext())); contents.add(new DynamicContentLayout(getApplicationContext())); ArrayAdapter<DynamicContentLayout> arrayAdapter = new ArrayAdapter<DynamicContentLayout>(getApplicationContext(), android.R.layout.simple_list_item_1, contents); listView.setAdapter(arrayAdapter); arrayAdapter.notifyDataSetChanged(); }
Xml Layout:
<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" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:background="@color/blue" android:layout_height="fill_parent" android:alwaysDrawnWithCache="true" android:clickable="true" android:layout_alignParentTop="true" android:divider="@color/grey" android:drawingCacheQuality="auto" android:fastScrollEnabled="true" android:paddingLeft="15dp" android:paddingRight="15dp" android:scrollbars="none" > </ListView> </RelativeLayout>
Now that I have started, no error is reported. But I could not see layoutItems. I see only the class name. for example: " com.myexample.dynamicontentoverview.DynamicContentLayout@405193d 0" as a listItem string instead of a layout.
There is one more point I want to add. I cannot use XMl Layout, since my views inside my DynamicLinearLayout can increase / decrease for certain lines.
Please suggest something.
Thanks.