2016-11-29 2 views
0

So habe ich eine Listenansicht mit einer Textansicht und ich möchte eine zweite Textansicht hinzufügen. Aber ich kann nicht herausfinden, wie man den Adapter modifiziert und dann in meiner Hauptaktivität aufruft, selbst nachdem ich viele ähnliche Fragen zu Stackoverflow durchgesehen habe.Hinzufügen einer zweiten Textansicht zu CustomAdapter ListView

Heres, wie mein CustomAdapter.java jetzt

class CustomAdapter extends ArrayAdapter<CharSequence>{ 

    public CustomAdapter(Context context, CharSequence[] routes) { 
     super(context, R.layout.custom_row ,routes); 
    } 

@NonNull 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater routeInflater = LayoutInflater.from(getContext()); 
    View customView = convertView; 
    if(customView == null){customView = routeInflater.inflate(R.layout.custom_row, parent, false);} 

    CharSequence singleRoute = getItem(position); 
    TextView routeText = (TextView) customView.findViewById(R.id.routeText); 
    routeText.setText(singleRoute); 

    ///// Textview I want to add 
    CharSequence routeNum = getItem(position); 
    TextView routeNumText = (TextView) customView.findViewById(R.id.numbersTextView); 
    routeNumText.setText(routeNum); 
    ///// 
    return customView; 

ist und herer mein MainActivity.java

///// fill listview numbers I want to add 
    final String[] routeListviewNumbers = getResources().getStringArray(R.array.routeNumbers); 
    //fill list view with xml array of routes 
    final String[] routeListViewItems = getResources().getStringArray(R.array.routeList); 

    //custom adapter for list view 
    ListAdapter routeAdapter = new CustomAdapter(this, routeListViewItems); 
    final ListView routeListView = (ListView) findViewById(R.id.routeListView); 
    routeListView.setAdapter(routeAdapter); 

jede Hilfe, wie Sie den Adapter ändern und es dann in der Haupttätigkeit nennen wäre sehr geschätzt. Vielen Dank!

+0

Was passiert, wenn Sie Ihre App ausführen? Wie unterscheidet sich das von dem, was Sie wollen? –

Antwort

1

Ich würde empfehlen, eine benutzerdefinierte Route-Klasse zu erstellen, da dieser Adapter ein Array behandeln soll. Erstellen Sie einige Mitgliedsvariablen für die Routernummer und Routenelemente in der neuen Klasse mit Getter- und Setter-Methoden. Dann sollten Sie in der Lage sein, eine neue Array-Liste von Route-Objekten in Ihrer Hauptaktivität zu erstellen und die vorhandenen String-Arrays zu durchlaufen, während Sie sie (als neue Route-Objekte) an das neue Array anhängen.

Sie müssen den Adapter ändern, um ein Route-Objekt anstelle von CharSequence zu akzeptieren. Hoffe, das zeigt Ihnen in die richtige Richtung.

0

Ich würde einen benutzerdefinierten Adapter für Sie empfehlen. Exm .. Route erstellen Klasse

class Route{ 
    public int number; 
    public String text; 
} 

Basis Adapter ...

public class myBaseAdapter extends BaseAdapter { 
private LayoutInflater mInflater; 
private List<Route> mRouteList; 

public BilgiAdapter(Activity activity,List<Route> routeList){ 
    mInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mRouteList = routeList; 
} 

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

@Override 
public Object getItem(int position) { 
    return mRouteList.get(position); 
} 

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View myView; 
    myView = mInflater.inflate(R.layout.line_layout,null); 
    Route r = mRouteList.get(position); 

    TextView txtRouteNumber = (TextView)myView.findViewById(R.id.textRouteNumber); 
    TextView txtRouteText = (TextView)myView.findViewById(R.id.textRouteText); 

    txtRouteNumber.setText(String.ValueOf(r.number)); 
    txtRouteText.setText(String.ValueOf(r.text)); 
    return myView; 
} 

}

MainActivity vs ..

ListView lstRoute; 
myBaseAdapter adapter; 
List<Route> list; 
... 
.. 
.. 
.. 
.. 
OnCreate(..) 
.. 
list = new ArrayList<Route>(); 
//add routes in list 
myBaseAdapter = new myBaseAdapter(MainActivity.this,list); 
lstRoute = (ListView)findViewById(R.id.listViewRoute); 
lstRoute.setAdapter(myBaseAdapter); 
... 
.. 
.. 

line_layout.xml (Layout-Datei)

<?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"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textRouteNumber"/> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textRouteText"/> 

</LinearLayout> 
Verwandte Themen