Android应用程序中的片段和适配器不显示数据

时间:2014-04-11 01:37:09

标签: java android android-fragments android-arrayadapter android-adapter

我是Android的新手。我有这个问题,我有一个Activity(MainActivity)并且有一个NavigationDrawer,这会切换两个片段 - ActivitiesFragment和ReportFragments。

问题在于ActivitiesFragments,不显示数据。

我已准备好适配器并准备好布局和片段。当我调试我的应用程序时,它实际上会带来数据,但是没有显示。这是我的代码:

ActivitiesAdapter

public class ActivitiesAdapter extends ArrayAdapter<Activities>
{
Context mContext;
int mLayoutResourceId;

public ActivitiesAdapter(Context context, int layoutResourceId)
{
    super(context, layoutResourceId);
    mContext = context;
    mLayoutResourceId = layoutResourceId;
}

public View getView(int position, View convertView, ViewGroup parent)
{
    View row = convertView;
    final Activities currentItem = getItem(position);

    if (row == null) 
    {
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
        row = inflater.inflate(mLayoutResourceId, parent, false);
    }

    row.setTag(currentItem);
    final TextView tituloview = (TextView) row.findViewById(R.id.tituloAct);
    tituloview.setText(currentItem.getTitle());
    final TextView descrpview = (TextView) row.findViewById(R.id.descrAct);
    descrpview.setText(currentItem.getDescription());

    return row;
}
}

这是我的片段ActivitiesFragment

public class ActivitiesFragment extends Fragment 
{
protected static final String TAG = "ActivitiesFragmment";
private MobileServiceClient mClient;
private MobileServiceTable<Activities> mActivitiesTable;
private ActivitiesAdapter mAdapter;



@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
{
    View view = inflater.inflate(R.layout.act_listfragment, container, false);
    return view;
}


@Override
public void onActivityCreated(Bundle savedInstanceState) 
{
    super.onActivityCreated(savedInstanceState); 
    try 
    {
        mClient = new MobileServiceClient("https://site.azure-mobile.net/",
                "APPLICATIONKEYAPPLICATIONKEY", 
                getActivity().getApplicationContext()).withFilter(new ProgressFilter());
        mActivitiesTable = mClient.getTable(Activities.class);
    } 

    catch (MalformedURLException e) 
    {
        createAndShowDialog(new Exception("There was an error creating the Mobile Service. Verify the URL"), "Error");
    }

  mAdapter = new ActivitiesAdapter(getActivity(), R.layout.act_itemlist);
  ListView listViewToDo = (ListView) getView().findViewById(R.id.activities_fragment_list);
  listViewToDo.setAdapter(mAdapter);
  refreshItemsFromTable();

}




private void createAndShowDialog(Exception exception, String title) 
{
    createAndShowDialog(exception.toString(), title);
}

private void createAndShowDialog(String message, String title) 
{
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity().getApplicationContext());
    builder.setMessage(message);
    builder.setTitle(title);
    builder.create().show();
}





private void refreshItemsFromTable() 
{
    mActivitiesTable.execute(new TableQueryCallback<Activities>() 
    {

        public void onCompleted(List<Activities> result, int count, Exception exception, ServiceFilterResponse response) {
            if (exception == null) {
                mAdapter.clear();

                for (Activities item : result) {
                    mAdapter.add(item);
                    Log.i(TAG, "Titulo: " + item.getTitle());
                }

            } else {
                createAndShowDialog(exception, "Error");
            }
        }
    });
}

}

我不知道什么是错的,但我想这个块不适用于OnActivityCreated方法:

mAdapter = new ActivitiesAdapter(getActivity(), R.layout.act_itemlist);
  ListView listViewToDo = (ListView) getView().findViewById(R.id.activities_fragment_list);
  listViewToDo.setAdapter(mAdapter);
  refreshItemsFromTable();

以下是我的布局:

这是我的幻想布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e1e1e1"
android:orientation="vertical" >

<TextView
    android:id="@+id/tvTituloActs"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/all_activities"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="8dp"
    android:textColor="#009ad2"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<ListView android:id="@+id/activities_fragment_list"
            android:layout_marginTop="8dp"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="#FFFFFF"
           android:layout_weight="1"
           tools:listitem="@layout/act_itemlist" 
           android:drawSelectorOnTop="false"/>

 <TextView android:id="@id/android:empty"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:text="No hay datos"/>

</LinearLayout>

这是布局act_itemlist。行布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
 android:layout_height="64dp" 
android:orientation="horizontal">
<ImageView
    android:id="@+id/icon"
    android:layout_width="32dp"
    android:layout_height="32dp"
    android:layout_marginLeft="8dp"
    android:gravity="center_vertical"
    android:src="@drawable/done"
    android:layout_gravity="center_vertical"/>

    <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical" >
        <TextView
        android:id="@+id/tvTituloAct"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="16dp"
        android:textSize="16sp"/>
        <TextView
        android:id="@+id/tvDescrAct"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:text="Description de la actividad" />
    </LinearLayout>

</LinearLayout>

我真的需要帮助!如果有人能看到我遗失的东西,请告诉我!

感谢!!!!

2 个答案:

答案 0 :(得分:0)

尝试交换这些行:

mAdapter = new ActivitiesAdapter(getActivity(), R.layout.act_itemlist);
  ListView listViewToDo = (ListView) getView().findViewById(R.id.activities_fragment_list);
  refreshItemsFromTable(); // populate first before attaching your adapter
  listViewToDo.setAdapter(mAdapter);

答案 1 :(得分:0)

我终于解决了我的问题。一切都很好,唯一的细节是布局。这是在片段布局上。

 <TextView android:id="@id/android:empty"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:text="No hay datos"/>

此textview不允许显示数据,因此我将其删除并运行。

感谢您的帮助@LazyNinja