2017-03-02 9 views
0

innerclassからリストビューを移入すると、私はこれは私のonCreateメソッドでは正常に動作しますが、問題は、私はできない私たち「この」でanonynmousクラスです のAndroid Studioは、ここで

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

array.add("kk"); 
array.add("bb"); 

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array); 

listView1.setAdapter(adapter); 
を使用する際に私のコードであり、 。 'this'をgetApplicationContext()に置き換えることは、何らかの理由で、onCreateの内部または外部のいずれかで機能しません。この

ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(),android.R.layout.simple_list_item_1,array); 

よう

誰も私が私が私がこのポインタを渡すどこでも

おかげ

答えて

0

あなたの匿名クラスはあなたのMainActivity内にあると仮定します。この場合、あなたは簡単に行うことができます。

ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array); 

あなたは「これは」あなたの匿名クラスの内部で、それは匿名の内部クラスのインスタンスではなく外部クラスのインスタンスを参照してください。

+0

ありがとうございました –

1

を多くのことを検索しましたが、これに答えを見つけることができない問題を見つけるのを助けることができます内部クラスのコンストラクタのviaパラメータを使用して、内部クラスフィールドに保存する - >

public class outerclass{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
    //.. other stuff 
    innerclass ic = new innerclass(this); 
    //.. other stuff 
    } 

    public class innerclass{ 
     private Context c; 
     public innerclass(Context c){ 
      this.c = c; 
     } 
    } 
} 
1

アダプタを使用してリストまたは配列に何かを追加する場合、リスト(この場合は配列)に変更があったことを警告する必要があります。アドイン関数を呼び出した後、アダプターを宣言するとき、また、adapter.notifyDataSetChanged()

を呼び出す(のonCreateの外にそれを宣言し)、その後(のonCreate内の自分の価値観を割り当てる必要があります)

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

以下を参照してください。

public class MainActivity extends AppCompatActivity { 

    // List of array strings that will represent list items 
    public static ArrayList<String> listItems = new ArrayList<String>(); 

    // Array string will handle the information stored in the listview 
    public static ArrayAdapter<String> adapter; 

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

     lView = (ListView) findViewById(R.id.list); 

     adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       listItems); 
     lView.setAdapter(adapter); 
    } 
} 

次に、あなたが呼び出すことができます。

listItems.add(<value>); 
adapter.notifyDataSetChanged(); 

必要性あなたもへのアクセス持っていることがあれば次に: listItems.clear();adapter.clear();

希望を、このことができます!

関連する問題