2016-06-22 15 views
1

Der Code zu machen ist:Wie eine Ansicht der Höhe Dynamische

View v = convertView; 

LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
v = inflater.inflate(R.layout.newsfeed_custom_listview_facebook, parent, false); 

TextView username = (TextView) v.findViewById(R.id.username); 
TextView prayerTitle = (TextView) v.findViewById(R.id.prayerTitle); 
TextView createdOn = (TextView) v.findViewById(R.id.createdOn); 
TextView prayerMessage = (TextView) v.findViewById(R.id.prayerMessage); 
ScrollView scrollView = (ScrollView) v.findViewById(R.id.scrollView); 
MixedObj menuItemsBean = menuItems.get(position); 
RoundedImageView img = (RoundedImageView) v.findViewById(R.id.image); 

username.setText(menuItemsBean.name); 
prayerTitle.setText(menuItemsBean.title); 
createdOn.setText(menuItemsBean.created_on); 

TextView textView = new TextView(context); 


//prayerMessage.setText(menuItemsBean.message); 
RelativeLayout.LayoutParams p = new 
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
p.addRule(RelativeLayout.BELOW, R.id.image); 
textView.setLayoutParams(p); 
textView.setPadding(5, 5, 5, 5); 
textView.setTextColor(Color.parseColor("#ffffff")); 
//textView.setText(menuItemsBean.message); 
String message = "please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life end"; 

message = menuItemsBean.message; 
textView.setText(message); 

ViewGroup viewGroup = (ViewGroup) v; 
viewGroup.addView(textView); 

RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) 
textView.getLayoutParams(); 

AbsListView.LayoutParams layoutParams = (AbsListView.LayoutParams) 

viewGroup.getLayoutParams(); 
//layoutParams.height +=(); 
return v; 

I Höhe einer benutzerdefinierten Ansicht ändern möchten Aufgeblasen für eine listView. Ich habe das versucht, aber es funktioniert nicht Ich möchte eine andere Höhe auf jeder Zelle abhängig von der Nachricht TextView Größe.

jemand bitte helfen ..

+0

Lassen Sie mich wissen, über die Lösung unten ... – GensaGames

Antwort

0

Das Problem Ihrer Realisierung ist es Grundlagen der Listview. Vom Basisobjekt ruft ListView für alle Ansichten nur eine einzige Größe auf und macht jede Aktion ungültig. Für Ihre Aufgabe müssen Sie Ihre eigene Liste verwenden. Für Beispiel

1) Betrieb mit mehreren Layouts:

<ScrollView> 
    <LinearLayout> 
     //Add in loop all your views in code above! 
    </LinearLayout> 
</ScrollView> 

2) Mit LinkedListView:

Dieser Ansicht wie Listview, sondern enthält Link zu jeder Ansicht, die Sie hinzugefügt haben, und doesn t mache sie ungültig. So können Sie diese und mehr als nur einfache ListView verwenden - Sie können beliebige Ansichten in Runtime ohne Artefakte ändern. Sehen Sie sich diese Liste auf Github - LinkedListView

UPDATE:

LinkedListView verwenden, nur importieren, um Ihr Projekt. Als Adapter

public class YourAdapter extends LinkedListView.Adapter { 

    private Context mainContext; 
    private LinkedList<View> mainViewList; 

    public CirclePagerAdapter (Context mainContext) { 
     this.mainContext = mainContext; 
     mainViewList = new LinkedList<>(); 
    } 

    //CALL THIS TO ADD YOUR OWN VIEW 
    public void addSimpleView (View v) { 
     mainViewList.add(v) 
     notifyDatasetChanged(); 
    } 


    //CALL THIS TO DELETE VIEW 
    public void deleteView(int index) { 
     mainViewList.remove(index); 
     notifyDatasetChanged(); 
    } 

    @Override 
     public View getObjectView(int position) { 
     if (position < mainViewList.size()) 
      return mainViewList.get(position); 

     return null; 
    } 

    @Override 
    public int getObjectCount() { 
     return mainViewList.size(); 
} 

erstellen Nach dem Erstellen von Adapter Anruf in Ihrer Aktivität!

LinkedListView listView = new LinkedListView (getContext()); 
LinkedListView.Adapter adapter = new MyBaseAdapter(); 
listview.setViewPager(adapter); 

Arbeitet ziemlich gut!