2016-07-29 30 views
0

我正在使用Android Studio編寫一個Android應用程序,該應用程序使用XMLPullParser從文件中讀取xml文件。在它之後,我想在我的ListView中有一個備用行顏色,我看到this topic並將@Override getView方法添加到我的適配器中,但它對我無效,,,我的問題是什麼?ListView中的備用行顏色

MainActivity.java

import java.io.IOException; 
import java.io.InputStream; 
import java.util.List; 

import android.os.Bundle; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.app.Activity; 
public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ListView listView = (ListView) findViewById(R.id.listView1); 

    List<App> apps = null; 
    try { 
     XMLPullParserHandler parser = new XMLPullParserHandler(getApplicationContext()); 
     InputStream is=getAssets().open("apps.xml"); 
     apps = parser.parse(is); 

     ArrayAdapter<App> adapter =new ArrayAdapter<App> 
       (this,android.R.layout.simple_list_item_1, apps); 
     listView.setAdapter(adapter); 

    } catch (IOException e) {e.printStackTrace();} 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 


    } 

} 

App.java

import android.content.Context; 
import android.graphics.Color; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 

import java.util.ArrayList; 

/** 
* Created by ali on 07/29/2016. 
*/ 
public class App extends ArrayAdapter{ 

private int id,location; 
private String title,activity,address; 

public App(Context context, int resource) { 
    super(context, resource); 
} 


public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getTitle() { 
    return title; 
} 
public void setTitle(String title) { 
    this.title = title; 
} 
public String getActivity() { 
    return activity; 
} 
public void setActivity(String activity) { 
    this.activity = activity; 
} 
public int getLocation(){ 
    return location; 
} 
public void setLocation(int location) 
{ 
    this.location=location; 
} 
public String getAddress(){ 
    return address; 
} 
public void setAddress(String address) 
{ 
    this.address=address; 
} 

@Override 
public String toString() { 
    return id + "\n " + title + "\n" +activtiy+"\n"+location+"\n"+address; 

} 
    @Override 
    public View getView(int position,View convertView, ViewGroup parent) 
    { 
     View view = super.getView(position, convertView, parent); 
     if (position % 2 == 1) { 
      view.setBackgroundColor(Color.BLUE); 
     } else { 
      view.setBackgroundColor(Color.CYAN); 
     } 

    return view; 
} 


} 

XMLPullParserHandler.java

import android.app.Activity; 
import android.content.Context; 
import android.content.res.Resources; 

import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.List; 

import org.xmlpull.v1.XmlPullParser; 
import org.xmlpull.v1.XmlPullParserException; 
import org.xmlpull.v1.XmlPullParserFactory; 

public class XMLPullParserHandler{ 

Context context; 

public XMLPullParserHandler(Context context) { 
    this.context = context; 
} 

private List<App> apps= new ArrayList<App>(); 
private App app; 
private String text; 


public List<App> getApps() { 
    return apps; 
} 

public List<App> parse(InputStream is) { 

    try { 
     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setNamespaceAware(true); 
     XmlPullParser parser = factory.newPullParser(); 

     parser.setInput(is, null); 

     int eventType = parser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      String tagname = parser.getName(); 
      switch (eventType) { 
       case XmlPullParser.START_TAG: 
        if (tagname.equalsIgnoreCase("app")) { 
         app = new App(context,android.R.layout.simple_list_item_1); 
        } 
        break; 

       case XmlPullParser.TEXT: 
        text = parser.getText(); 
        break; 

       case XmlPullParser.END_TAG: 
        if (tagname.equalsIgnoreCase("app")) { 
         apps.add(app); 
        }else if (tagname.equalsIgnoreCase("id")) { 
         app.setId(Integer.parseInt(text)); 
        } else if (tagname.equalsIgnoreCase("title")) { 
         app.setTitle(text); 
        } else if (tagname.equalsIgnoreCase("activity")) { 
         app.setActivity(text); 
        } else if (tagname.equalsIgnoreCase("location")){ 
         app.setLocation(Integer.parseInt(text)); 
        } else if (tagname.equalsIgnoreCase("address")){ 
         app.setAddress(text); 
        } 

        break; 

       default: 
        break; 
      } 
      eventType = parser.next(); 
     } 

    } catch (XmlPullParserException e) {e.printStackTrace();} 
    catch (IOException e) {e.printStackTrace();} 

    return apps; 
    } 
} 

activity_main.xml中

<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/listView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:divider="#d8d8d8" 
    android:dividerHeight="1dp"> 

</ListView> 

+1

如果你想有2 ..或者更多的顏色你會需要一個自定義適配器 – JCDecary

+0

@JCDecary我的App類擴展了ArrayAdapter ,,,它不夠用於自定義適配器? –

回答

2

在這裏,您需要做的創建CustomAdapter什麼:

public class CustomAdapter extends ArrayAdapter<App> { 

    public CustomAdapter (Context context) { 
     super(context); 
    } 

    public View getView(int position, View view, ViewGroup root) { 
     CustomHolder holder; 
     if(view == null) { 
      view = LayoutInflater.from(this.getContext()).inflate(R.layout.simple_list_item_1, root, false); 
      holder = new CustomHolder(); 
      view.setBackgroundColor(position % 2 == ? Color 1 : Color 2); 
      view.setTag(holder); 
     } else { 
      holder = (CustomHolder)view.getTag(); 
     } 

     holder.setApp((App)this.getItem(position)); 
     return view; 
    } 

    public static class CustomHolder{ 
     public void setApp(App app){//DO YOUR THING} 

     public CustomHolder() { 
     } 
    } 
} 

那麼您的活動應該是這樣的:

import android.os.Bundle; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.app.Activity; 
public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ListView listView = (ListView) findViewById(R.id.listView1); 

    List<App> apps = null; 
    try { 
     XMLPullParserHandler parser = new XMLPullParserHandler(getApplicationContext()); 
     InputStream is=getAssets().open("apps.xml"); 
     apps = parser.parse(is); 

     CustomAdapter<App> adapter = new CustomAdapter (this); 
     listView.setAdapter(adapter); 

    } catch (IOException e) {e.printStackTrace();} 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
    }  
} 
+0

什麼是CustomHolder和PoiHolder()? –

+0

對不起,我使用了一些我已經在我的應用程序中使用的代碼 – JCDecary

+0

可以爲我的應用程序編寫自定義適配器嗎? –