9

接続の変更をブロードキャストで受信するブロードキャスト受信者があります。接続の変更が検出されるたびにトリガーされます。10個の項目のリストビューがあります。 0から9までの特定の項目の位置を含むEditText。ブロードキャストが受信されると、生成される乱数に基づいて0から9までの乱数が生成されます。対応するテキストの色を変更したいテキストビュー。これを実装する方法は?接続の変更が検出されたときListViewのランダムな項目の色を変更します

私の現在のコードは次のとおりです。

たManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.app.prateek.listviewbroadcastreceiver"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".MyReceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

MyReceiver.java

package com.app.prateek.listviewbroadcastreceiver; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 

import java.util.Random; 

public class MyReceiver extends BroadcastReceiver { 
    public MyReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO: This method is called when the BroadcastReceiver is receiving 
     // an Intent broadcast. 

     int min = 0; 
     int max = 9; 

     Random r = new Random(); 
     int highlight = r.nextInt(max - min + 1) + min; 
     Toast.makeText(context, ""+highlight, Toast.LENGTH_SHORT).show(); 

     //change color of that particular object with generated random ID in listview 
    } 
} 

MainActivity.java

package com.app.prateek.listviewbroadcastreceiver; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.ListView; 

public class MainActivity extends AppCompatActivity { 

    ListView listView; 
    IdAdapter idAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     listView = (ListView) findViewById(R.id.listView); 
     idAdapter=new IdAdapter(getApplicationContext(),R.layout.row_layout); 
     listView.setAdapter(idAdapter); 
     for(int i=0;i<10;i++) 
     { 
      idAdapter.add(new Id(i)); 
     } 
    } 
} 

IdAdapter.java

package com.app.prateek.listviewbroadcastreceiver; 

import android.content.Context; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 

import java.util.ArrayList; 
import java.util.List; 



public class IdAdapter extends ArrayAdapter { 
    List list = new ArrayList(); 

    public IdAdapter(Context context, int resource) { 
     super(context, resource); 
    } 

    @Override 
    public void add(Object object) { 
     super.add(object); 
     list.add(object); 
    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Nullable 
    @Override 
    public Object getItem(int position) { 
     return list.get(position); 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row; 
     row = convertView; 
     DataHandlerRow dataHandlerRow; 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.row_layout, parent, false); 
      dataHandlerRow = new DataHandlerRow(); 
      dataHandlerRow.editTextId = (EditText) row.findViewById(R.id.editTextId); 
      row.setTag(dataHandlerRow); 
     } else { 

      dataHandlerRow = (DataHandlerRow) row.getTag(); 

     } 
     Id id = (Id) this.getItem(position); 
     dataHandlerRow.editTextId.setText(id.getId() + ""); 
     return row; 
    } 

    static class DataHandlerRow { 
     EditText editTextId; 
    } 
} 

Id.java

public class Id { 
    private int id; 

    public Id(int id) { 
     this.id = id; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

row_layout.xml

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

    <EditText 
     android:id="@+id/editTextId" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="1" 
     android:textColor="@color/colorAccent" 
     android:layout_centerHorizontal="true" 
     android:textSize="20dp"/> 

</RelativeLayout> 

答えて

0

新しいアダプタを作成し、放送からフィールドの色を変更する方法をリスナーコールバックパターン

-1

FO通常のアダプターで作業したい場合は、パトロンのビューホルダーView holder patternを実装する必要があります。

あなたが望むことをするには、実装されているオブジェクトのプロパティと同じプロパティを持つ色をアダプタに実装するだけです。

Ejample(色が文字列として、あるいはアプリリソースとして渡すことができます)

public class Id { 
    private int id; 
    private String color; 

    public setColor(String color) 
    { 
    this.color= color; 
    } 
    public getColor() 
    { 
    return color; 
    } 
    public Id(int id) { 
     this.id = id; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

あなたが財産を取得した後、あなただけの色を入れて、あなたのリストからアダプタの対応する要素をピックアップする必要がありあなたは

((Iadapter)listview.getAdapter()).list.get(position_random).setColor("#ffa500"); 
((Iadapter)listview.getAdapter()).notifydatasetchanged(); 

あなたに

アダプタたいとアダプタためにあなたの変更を通知します
dataHandlerRow.editTextId.setTextColor(Color.parseColor(id.getColor())); 

これは、私はそれが

よろしく

+0

を使用して、リストビューでそれを設定するのに役立ちます願って、あなたを提供します受信機? –

+0

あなたのクラスでブロードキャストのインスタンスを作成して登録するか、変更したいクラスの別の受信者を登録し、Onreceiverで新しいsendBroadcast()を実行する必要があります。 –

+0

それは良いデザインですか?....別の受信機を使用して?? –

関連する問題