如何使用switch case从片段中打开一个新活动?

时间:2017-04-08 13:29:56

标签: java android android-activity switch-statement fragment

嗨我遇到了我所做的开关盒问题。我想从片段中打开一个新活动。

这是我的开关:

@Override
public void onClick(View v)
{
    switch (v.getId())
    {
        //When the change password button is pressed...
        case R.id.btn_chg_password:
            showDialog();
            break;
        //When the Logout but is pressed...
        case R.id.btn_logout:
            logout();
            break;
        //When the write diary button is pressed...
        case R.id.btn_write:
            goToWriteDiary();
            break;
        //When the Read Diary button is pressed...
        case R.id.btn_read:
            Intent intent=new Intent(getActivity(), ReadFragment.class);
            startActivity(intent);
            break;
    }
}

这是我希望用Button = btn_read

打开的活动
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.ArrayList;
import java.util.Arrays;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class ReadFragment extends AppCompatActivity
{
private RecyclerView recyclerView;
private ArrayList<Diary> data;
private DataAdapter adapter;
private SharedPreferences pref;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_read);
    initViews();
}

private void initViews()
{
    recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);

    String unique_id = pref.getString(Constants.UNIQUE_ID,"");
    loadJSON(unique_id);
}

private void loadJSON(String unique_id)
{
    Gson gson = new GsonBuilder()
            .setLenient()
            .create();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    ServerRequest request = new ServerRequest();

    Diary diary = new Diary();
    diary.setUnique_id(unique_id);
    request.setOperation(Constants.CREATE_DIARY_OPERATION);

    RequestInterface requestInterface = retrofit.create(RequestInterface.class);
    Call<DiaryResponse> call = requestInterface.getDiary();
    call.enqueue(new Callback<DiaryResponse>()
    {
        @Override
        public void onResponse(Call<DiaryResponse> call, Response<DiaryResponse> response)
        {
            DiaryResponse diaryResponse = response.body();
            data = new ArrayList<>(Arrays.asList(diaryResponse.getDiary()));
            adapter = new DataAdapter(data);
            recyclerView.setAdapter(adapter);
        }

        @Override
        public void onFailure(Call<DiaryResponse> call, Throwable t)
        {
            Log.d("Error",t.getMessage());
        }
    });
}
}

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

EventBus在这里真的很有帮助。您可以参考我现有的example来解决您的问题。

答案 1 :(得分:0)

启动活动代码似乎很完美。

可能Null Pointer Exception位于ReadFragment活动代码的下面一行。

 String unique_id = pref.getString(Constants.UNIQUE_ID,"");

pref 未初始化,因此在onCreate方法中初始化。

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_read);
    pref= getSharedPreferences("your_pref_name", Context.MODE_PRIVATE);
    initViews();
}