我試圖訪問我的GridView中的TextView,並在我調用playSoE
方法時更改它們的背景顏色,使其更改。從GridView中更改項目
ImageAdapter.java:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private int mCount;
public int[] mIds; //stores Ids from TextViews
public ImageAdapter(Context c, int count) {
mContext = c;
mCount = count;
mIds = new int[mCount];
}
public int getCount() {
return mCount;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
textView = new TextView(mContext);
mIds[position] = textView.getId(); //Id is stored into array
textView.setGravity(Gravity.CENTER);
textView.setLayoutParams(new GridView.LayoutParams(100, 100));
} else {
textView = (TextView) convertView;
}
textView.setBackgroundColor(Color.RED);
textView.setText("" + position);
return textView;
}
}
activity_main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
android:id="@+id/title_horizontalScrollView"
android:layout_margin="1dp"
android:fillViewport="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/relativelayout">
<GridView
android:id="@+id/mGridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</RelativeLayout>
</HorizontalScrollView>
MainActivity.java:
public class MainActivity extends ActionBarActivity {
private boolean mIsPlaying;
private int primesLE;
private GridView mGridView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mIsPlaying = false;
ViewGroup.LayoutParams layoutParams;
primesLE = 225;
int numOfColumns = (int)Math.round(Math.sqrt((double) primesLE));
int numOfRows = (int)Math.ceil((double)primesLE/(double)numOfColumns);
GridView mGridView = (GridView) findViewById(R.id.mGridView);
layoutParams = mGridView.getLayoutParams();
layoutParams.width = 150*numOfColumns; //this is in pixels
mGridView.setLayoutParams(layoutParams);
mGridView.setNumColumns(numOfColumns);
mGridView.setAdapter(new ImageAdapter(this, primesLE));
}
@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();
Log.d("Menu","Button Pressed");
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
else if (id == R.id.action_status){
if(mIsPlaying) {
mIsPlaying = false;
item.setIcon(R.drawable.ic_action_play);
item.setTitle("Play");
playSoE();
}
else {
mIsPlaying = true;
item.setIcon(R.drawable.ic_action_pause);
item.setTitle("Pause");
}
return true;
}
return super.onOptionsItemSelected(item);
}
private void playSoE(){
int[] viewIds = ((ImageAdapter)mGridView.getAdapter()).mIds; //trying to get the Ids for the TextViews, doesn't work and crashes
for(int i = 0; i < primesLE;i++){
Log.d("Getting view number",""+i);
mGridView.getAdapter().
getItem(i).setBackgroundColor(Color.BLUE);//this doesn't work, crashes
mGridView.getChildAt(i).setBackgroundColor(Color.BLUE); //this doesn't work either, crashes
}
}
}
的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myname.sieveoferatosthenes" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我一直在尋找方法來做到這一點,但他們似乎都沒有爲我工作。
TextView的你是什麼意思'<定義TextView的名字在這裏>'?我只有'mGridView',需要弄清楚如何獲取其中的一個TextView。 – user2361174
你嘗試過單獨定義textview(私人textview ..(findviewbyid ...)並將textview插入到上面的代碼中嗎? – Mazino
這並不奏效,每當我創建一個新的TextView時,我都將其ID和存儲在'playSoE()'嘗試'mGridView.getAdapter()'爲了獲得數組,但給了我這個錯誤'java.lang.NullPointerException:嘗試調用虛擬方法'android。 widget.ListAdapter android.widget.GridView.getAdapter()'空對象引用' – user2361174