1

同様の問題を見たことがありますが、私のものとまったく同じものはなく、答えを理解できなかったので、あなたが私を助けてくれることを願っています. 私が言及しているスレッドは、非同期タスクなどの問題を何らかの形で解決しましたが、それが何であるかはわかりません。TextView と ListView の下にレイアウトがあるという問題があります。ListView と TextView はどちらも動的に更新されます。私のリストを更新する(そしてLogCatにログインする)私の方法によれば、追加されたエントリがあります。

12-23 18:31:03.185: D/FileHandle.readList(24083): 1 エントリを読み取る

12-23 18:31:03.185: D/MainActivity.updateList(24083): 1 つのエントリでリストを更新しています

しかし、TextView しか表示されず、リストは表示されません。レイアウトは次のとおりです。

<?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="fill_parent"
    android:orientation="vertical" >

    <TextView android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txt_path"
        android:textSize="25sp" />

    <ListView android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:id="@+id/list"
        android:longClickable="true" >
    </ListView>
       <!--android:id="@android:id/list" />-->

</LinearLayout>

リストを読み取って更新するためのコードは次のとおりです。

private TextView mPathView;
private ListView mListView;
private String mPath;
private String mCurrentList;
private ArrayList<ListEntry> mList = new ArrayList<ListEntry>();
private ArrayAdapter<String> mAdapter;
private List<String> mListContent = new ArrayList<String>();


/**
 * Calls readList(mCurrentList)
 */
private void readList() {
    readList(mCurrentList);
}
/**
 * Reads items from list into mListContent
 * 
 * @param listName name of the list
 */
private void readList(String listName) {
    if (mCurrentList.compareToIgnoreCase(listName) != 0) {
        mPath += "/" + listName;
    }
    mCurrentList = listName;
    Log.d(TAG + ".readList", "Reading List " + listName);
    mList = FileHandle.readList(context, listName);
}
/**
 * Updates the list shown with the content of mListContent.
 */
private void updateList() {
    mListContent.clear();
    for (ListEntry e : mList) {
        mListContent.add(e.toString());
    }
    
    Log.d(TAG + ".updateList", "Updating List with " + mList.size() + " entries");
    mAdapter.notifyDataSetChanged();
}

FileHandle の静的メソッドは機能しています。前に、レイアウトなしで、TextView なしで、単純な ListView だけでコードをテストしましたが、うまくいきました。

そして、これが私のonCreateメソッドです

/**
 * (non-Javadoc)
 * @see android.app.Activity#onCreate(android.os.Bundle)
 */
@Override
public void onCreate(Bundle icicle) {
    Log.d(TAG + ".onCreate", "Launching Activity");
    super.onCreate(icicle);
    setContentView(R.layout.main_layout);
    
    MainActivity.context = getApplicationContext();
    mPathView = (TextView) findViewById(R.id.txt_path);
    mPath = mCurrentList = getString(R.string.rootlist);
    mListView = (ListView) findViewById(R.id.list);
    ListEntry.init(getApplicationContext());
    FileHandle.init(getApplicationContext());
    
    
    mAdapter = new ArrayAdapter<String>(this, 
                       android.R.layout.simple_list_item_1, mListContent);
    
    mPathView.setText(mPath);
    mListView.setAdapter(mAdapter);
    
    readList();
    updateList();
  }

誰かが私に正しい方向へのヒントを与えることができれば、それは素晴らしいことです!

リストではなく、TextViewのみを表示できます

4

1 に答える 1

1

根本的な問題
気付くのにこんなに時間がかかったとは思いません...しかし、vertical向きを使用する必要があります:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

ListView はずっと画面から外れていました。


その他の潜在的な問題
を入力した後、新しいアダプタを ListView に渡す必要がありmAdapterますsetAdapter()notifyDataSetChanged()この場合、あなたが望むことはしません。


または、次のように、コードの順序を少し変更できますonCreate()

mAdapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, mListContent);

mListView.setAdapter(mAdapter);

readList();
updateList();

次にmListContentリストにします:

List<String> mListContent = new ArrayList<String>();

最後に変更updateList()

private void updateList() {
    mListContent.clear();
    for (int i = 0; i < mList.size(); i++) {
        mListContent.add(mList.get(i).toString());
    }

    Log.d(TAG + ".updateList", "Updating List with " + mList.size() + " entries");
    mAdapter.notifyDataSetChanged();
}

この順序で、動作するnotiftyDataSetChanged()はずです。

于 2012-12-23T17:48:21.833 に答える