17875


Android Studio で開発をしていますが、始めて間もないのでわからないことだらけです。  
どうか知識を貸してください。

現在ListViewでの背景を動的に変更したいと考えています(ゼブラカラーに変更)。

ただ、ネット上の先人達のサンプルを多数確認しましたが、解決できない問題点がいくつかあるので箇条書きにしていきます。

・AppcompatActivityを継承している(ターゲットバージョンを古く設定している、また新しい機能も使いたい)のでArrayAdapter<>を継承できない。

⇒getViewをオーバーライドして int position を持ってくることができない。

・動的に背景を変更したいので指定して変更ではなくif分岐で処理したい。  
⇒int position が必要になってくる

(ex)

[code]

    if(position%2==0){
        view.setBackgroundColor(Color.BLACK);
    }else{
        view.setBackgroundColor(Color.BLUE);
    }
    
[/code]

など

・そのほかのサンプルにあった getItemAtPosition などを利用しようとも考えたが利用できなかった。

positionだけを獲得する方法はあるのでしょうか？また、無理にpositionを獲得しなくても、このような処理を施すことはできるのでしょうか？よろしくお願いします。

以下サンプルを付け加えました。

[code]

    public class MainActivity extends AppCompatActivity {
     final String[] baseArray = {"ApplePie", "BananaBread", "CupCake", "Donut", "Eclair", "Froyo", "GingerBread", "Honeycomb", "IcecreamSandwich",
            "JellyBean", "KitKat", "Lollipop", "Marshmallow"};
    
    ListView list1;
    Button btn1;
    int position;
    String item;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        //setSupportActionBar(toolbar);
    
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    
        findView();
    
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_multiple_choice, baseArray);
    
        list1.setAdapter(adapter);
    
     /*if (position % 2 == 0) {
            list1.setBackgroundColor(Color.rgb(100, 100, 100));
        } else {
            list1.setBackgroundColor(Color.RED);
        }*/
    }
        @Override
        public boolean onCreateOptionsMenu (Menu menu){
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected (MenuItem item){
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    
        public void findView() {
    
            btn1 = (Button) findViewById(R.id.button1);
            list1 = (ListView) findViewById(R.id.listView1);
    
        }
    }
    
[/code]


CC BY-SA 4.0
2015-10-20T08:04:14.713
17845
2020-03-29T06:07:54.353
2020-03-29T06:07:54.353
3060
12789
question
java android android-listfragment
アンドロイドのListViewの背景について


ネット上の先人達のサンプルでは、`Adapter`クラスを継承したものを各自実装しています。

1 new -> Java classで`MainActivity`と同じパッケージに`MyAdapter.java`を追加する。

2 次のように、`ArrayAdapter<String>`を継承させる。コンストラクタなど、必要なものを作る。

[code]

    public class MyAdapter extends ArrayAdapter<String> {
        // コンストラクタ
        public MyAdapter(Context context, int resource, String[] objects){
            super(context, resource, objects);
        }
        // ここに、getView()などを記述する
    }
    
[/code]

3 `MainActivity`側で、次のように`MyAdapter`を使用するよう書き換える。

[code]

    ArrayAdapter<String> adapter = new MyAdapter(getApplicationContext(), android.R.layout.simple_list_item_multiple_choice, baseArray);
    
[/code]


CC BY-SA 3.0
2015-10-21T00:40:01.080
17875
2015-10-21T01:45:49.763
2015-10-21T01:45:49.763
845
845
17845
answer