Выравнивание текста в Android ListView - PullRequest
1 голос
/ 28 октября 2011

Я работаю над программой для чтения RSS, и я не могу понять, почему мой текст выстраивается неправильно.

Я смотрел посты, похожие по своей природе, такие как:

Я просто не могу понять, почему мой не будет работать правильно.

Может кто-нибудь объяснить, почему мой текст не выравнивается должным образом внутри моего списка?

Это класс, на котором основано представление:

public class RSSReader extends Activity implements OnItemClickListener
{

public final String RSSFEEDOFCHOICE = "http://app.calvaryccm.com/mobile/android/v1/devos";

public final String tag = "RSSReader";
private RSSFeed feed = null;
private static final DateFormat PARSING_PATTERN = 
        new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); 
    private static final DateFormat FORMATTING_PATTERN = 
        new SimpleDateFormat("EEEE, MMMM dd, yyyy"); 

/** Called when the activity is first created. */

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);

    // go get our feed!
    feed = getFeed(RSSFEEDOFCHOICE);

    // display UI
    UpdateDisplay();

}


private RSSFeed getFeed(String urlToRssFeed)
{
    try
    {
        // Setup the URL
       URL url = new URL(urlToRssFeed);

       // Create the factory
       SAXParserFactory factory = SAXParserFactory.newInstance();
       // create a parser
       SAXParser parser = factory.newSAXParser();

       // Create the reader (scanner)
       XMLReader xmlreader = parser.getXMLReader();
       // Instantiate our handler
       RSSHandler theRssHandler = new RSSHandler();
       // Assign our handler
       xmlreader.setContentHandler(theRssHandler);
       // Get our data via the url class
       InputSource is = new InputSource(url.openStream());
       // Perform the synchronous parse           
       xmlreader.parse(is);
       // Get the results - should be a fully populated RSSFeed instance, or null on error
       return theRssHandler.getFeed();
    }
    catch (Exception ee)
    {
        // If we have a problem, simply return null
        System.out.println(ee.getMessage());
        System.out.println(ee.getStackTrace());
        System.out.println(ee.getCause());
        return null;
    }
}
public boolean onCreateOptionsMenu(Menu menu) 
{
    super.onCreateOptionsMenu(menu);
    menu.add(Menu.NONE, 0, 0, "Refresh");
    Log.i(tag,"onCreateOptionsMenu");
    return true;
}

public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
    case 0:

        Log.i(tag,"Set RSS Feed");
        return true;
    case 1:
        Log.i(tag,"Refreshing RSS Feed");
        return true;
    }
    return false;
}


private void UpdateDisplay()
{
    ListView itemlist = (ListView) findViewById(R.id.itemlist);     

    //ArrayAdapter<RSSItem> adapter = new ArrayAdapter<RSSItem>(this,android.R.layout.simple_list_item_1,feed.getAllItems());

    List<Map<String, String>> data = new ArrayList<Map<String, String>>();
    for (RSSItem item : feed.getAllItems()) {
        Map<String, String> datum = new HashMap<String, String>(2);
        datum.put("title", item.getTitle());

        String outputDate;
        try {
           Date date = PARSING_PATTERN.parse(item.getPubDate());
           outputDate = FORMATTING_PATTERN.format(date);
        } catch (ParseException e) {
           outputDate = "Invalid date"; // Date parse error
        } 
        datum.put("date", outputDate);
        data.add(datum);
    }
    SimpleAdapter adapter = new SimpleAdapter(this, data,
                                              android.R.layout.simple_list_item_2,
                                              new String[] {"title", "date"},
                                              new int[] {android.R.id.text1,
                                                         android.R.id.text2});

    itemlist.setAdapter(adapter);

    itemlist.setOnItemClickListener(this);

    itemlist.setSelection(0);

}

 @Override
 public void onItemClick(AdapterView parent, View v, int position, long id)
 {

     //Log.i(tag,"item clicked! [" + feed.getItem(position).getTitle() + "]");      

     Intent itemintent = new Intent(this,ShowDescription.class);

     Bundle b = new Bundle();
     b.putString("title", feed.getItem(position).getTitle());
     b.putString("description", feed.getItem(position).getDescription());
     b.putString("link", feed.getItem(position).getLink());
     b.putString("pubdate", feed.getItem(position).getPubDate());
     b.putString("enclosure", feed.getItem(position).getEnclosure());

     itemintent.putExtra("android.intent.extra.INTENT", b);

     startActivity(itemintent);

 }

}

Это мой XML для предыдущего класса:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/itemlist" android:layout_gravity="left"
/>    
</LinearLayout>

Это изображение того, что происходит:

enter image description here

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

выглядит хорошо. Может ли быть так, что поля приходят с пробелами? Попробуйте снять заголовок с помощью обрезки или запустите отладчик, чтобы увидеть, не код ли это, а данные.

item.getTitle().trim();
0 голосов
/ 28 октября 2011

Ответ Sqefv хорош, хотя я также рекомендую вам взглянуть на инструмент просмотра иерархии в Android SDK, который находится в каталоге инструментов (для меня это C: \ AndroidSDK \ tools).

Вы можете использовать его для проверки правильности макета и правильного выравнивания текстовых представлений. Однако, поскольку вы используете android.R.layout.simple_list_item_2, я думаю, что вам лучше попытаться обрезать () заголовок элемента, и если это не сработает, попробуйте средство просмотра иерархии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...