0

SharedPreferences オブジェクトからキーのリストを作成しようとしています。ユーザーは新しいキーと値のペアを追加できるため、動的に行う必要があります。

私のアクティビティの onCreate 関数は次のとおりです。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LayoutInflater inflater = this.getLayoutInflater();
        LinearLayout layout = (LinearLayout)inflater.inflate(R.layout.activity_show_saved, null);

        this.add_here = (LinearLayout)layout.findViewById(R.id.saved_list);

        // Loading shared preferences
        SharedPreferences sp = this.getSharedPreferences("saved_sequences", MODE_PRIVATE);
        Map<String, ?> kv = sp.getAll();

        int i = 0;
        // Iterating through shared preferences
        for(Map.Entry<String, ?> entry : kv.entrySet()) {
            Toast.makeText(this, entry.getKey(), Toast.LENGTH_SHORT).show();
            TextView to_add = new TextView(this);
            to_add.setText(entry.getKey());
            to_add.setId(i++);
            this.add_here.addView(to_add, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        }

        this.setContentView(layout);
    }

this.add_hereとして宣言されたクラス変数はどこにありますかprivate LinearLayout。そして、これがインフレされているxmlファイルです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/background"
    tools:context=".ShowSaved" >

    <com.google.ads.AdView 
        android:id="@+id/adViewTop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ads:adUnitId="*****************"
        ads:adSize="SMART_BANNER"
        ads:testDevices="TEST_EMULATOR"
        ads:loadAdOnCreate="true" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:id="@+id/saved_list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

        </LinearLayout>

    </ScrollView>


</LinearLayout>

残念ながら、空白の画面が表示されます。while 内の Toast は保存されたキーを期待どおりに正しく表示するため、問題は TextViews の追加にあります。

4

2 に答える 2

0

同様の動的リストを作成しましたが、TextView はスタンドアロン レイアウトの一部です。おそらく、これでうまくいくでしょう。

このコードは私のために働きます:

        final ScrollView ll = (ScrollView) getLayoutInflater().inflate(
                R.layout.dropdown_list, null);

        final LinearLayout container = ((LinearLayout) ll
                .findViewById(R.id.dropdown_list_container));

        if (myObjectsCount > 0) {

            for (final MyObject ci : myObjects()) {

                LinearLayout item = ((LinearLayout) getLayoutInflater()
                        .inflate(R.layout.list_item, null));

                TextView tv = ((TextView) item
                        .findViewById(R.id.list_item_text));
                tv.setText("your text here");


                container.addView(item);

            }
        }

そして、テキストビューのレイアウト:

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/buttons"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="horizontal" >

<TextView
    android:id="@+id/list_item_text"
    style="@android:style/Widget.TextView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center_vertical" />

</LinearLayout>
于 2013-01-08T23:11:15.607 に答える
0

誰かがコメントですでに述べているように、それは正しい方法ではありませんでした。ListView を使用して得られた結果を次に示します。見てください。

public class ShowSaved extends Activity implements OnItemClickListener {

    // Layout
    private ListView add_here;
    private TextView empty_view;

    // String Array
    private ArrayList<String> string = new ArrayList<String>();

    // SharedPreferences object and editor
    private SharedPreferences sp;

    // Array adapter for ListView add_here
    private ArrayAdapter<String> saved;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.activity_show_saved);

        this.add_here = (ListView)findViewById(R.id.saved_list);
        this.empty_view = (TextView)findViewById(R.id.empty_text);

        // Loading shared preferences and editor
        this.sp = this.getSharedPreferences("saved_sequences", MODE_PRIVATE);

        // Creating the Adapter with all strings in an array
        this.saved = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, string);
        this.saved.setNotifyOnChange(true);

        // Retrieving all pairs in SharedPreferences sp
        Map<String, ?> kv = sp.getAll();

        // Iterating through shared preferences
        for(Map.Entry<String, ?> entry : kv.entrySet()) {       
            saved.add(entry.getKey());
        }

        // Setting Adapter to ListView and empty View
        this.add_here.setEmptyView(empty_view);
        this.add_here.setAdapter(this.saved);

        // Setting Listener for ListView add_here
        this.add_here.setOnItemClickListener(this);
    }

注: このコードは、OnItemClickListener インターフェイスに必要な onItemClick 関数がないため、単独ではコンパイルされません。

于 2013-01-14T13:11:07.010 に答える