我如何在Android中注册81个文本视图?

时间:2016-07-09 21:47:55

标签: java android

我正在android中构建一个数独,所以我如何注册所有的textview 例如:

button1=(Button)findViewByid(R.id.btn1)

我是否需要编写81个此类语句来注册每个TextView

3 个答案:

答案 0 :(得分:1)

您可以使用带适配器的网格视图而不是文本视图

网格项

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

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="13sp"
        android:text="@string/country_name"
        android:textColor="@color/accent_color"
        android:gravity="center"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:background="@color/color_primary_dark"/>

</RelativeLayout>

适配器类

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {

private List<ItemObject> itemList;
private Context context;

public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
    this.itemList = itemList;
    this.context = context;
}

@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {

    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, null);
    RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
    return rcv;
}

@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
    holder.textView.setText(itemList.get(position).getName());
}

@Override
public int getItemCount() {
    return this.itemList.size();
}



 public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener{

 public TextView textView;

public RecyclerViewHolders(View itemView) {
    super(itemView);
    itemView.setOnClickListener(this);
    textView = (TextView)itemView.findViewById(R.id.textView);
}

  @Override
  public void onClick(View view) {
    Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT).show();
 }
 }
 }

活动类

public class MainActivity extends ActionBarActivity {

private GridLayoutManager lLayout;

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

    Toolbar topToolBar = (Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(topToolBar);
    topToolBar.setLogo(R.drawable.logo);
    topToolBar.setLogoDescription(getResources().getString(R.string.logo_desc));

    List<ItemObject> rowListItem = getAllItemList();
    lLayout = new GridLayoutManager(MainActivity.this, 4);

    RecyclerView rView = (RecyclerView)findViewById(R.id.recycler_view);
    rView.setHasFixedSize(true);
    rView.setLayoutManager(lLayout);

    RecyclerViewAdapter rcAdapter = new RecyclerViewAdapter(MainActivity.this, rowListItem);
    rView.setAdapter(rcAdapter);
}



private List<ItemObject> getAllItemList(){

    List<ItemObject> allItems = new ArrayList<ItemObject>();
    allItems.add(new ItemObject("1");
    allItems.add(new ItemObject("2");
    allItems.add(new ItemObject("3");

    return allItems;
}
}

答案 1 :(得分:1)

你可以在app运行时在java代码中添加视图。

您可以单独在xml文件中编写textview的xml语句,然后对其进行充气。

通过这种方式,您不需要视图ID,因为您已经有了它的参考。

grid.xml

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

MyActivity.java

ArrayList<TextView> list = new ArrayList<>();
for (int i = 0; i < 81; i++) {
    TextView view = (TextView)LayoutInflater.from(ItemDragAndSwipeUseActivity.this).inflate(R.layout.grid, null);
    list.add(view);
 }
 // then attach these views to the layout with addView()           

答案 2 :(得分:0)

您不必为此使用ID。您只需在XML中创建一个View(容器)并使用for循环完全填充它而不使用ID。您可以通过Container中的索引访问它们。

我希望这会有所帮助。